sbtのヒープサイズを設定する方法は?


90

SBT0.12.0を使用しています。私はスタックオーバーフローに関する他の回答を読んでそれに従いましたが、それらのどれも役に立ちません、例えば:

  • ForkRunクラスの作成-sbtの使用中にフォークされたプロセスを観察していません
  • set environment variable-設定されていますJAVA_OPTSが、sbtのプロセスコマンドラインはそれをまったく使用していないようです。
  • sbt -J-Xmx2Gパラメータをsbtプロセスコマンドラインに-Xmx1536m追加しますが、追加されたパラメータの代わりに古い値がsbtによって使用されます。

私は何かが足りないのですか?テストとテストの両方を行うときに、sbt 0.12のヒープサイズを設定するにはどうすればよいrunですか?


9
memsbtを開始するときにパラメータを試しましたか?(例sbt -mem2000
om-nom-nom 2013年

2
タイプミスがあるかもしれません。JAVA_OPSではなくJAVA_OPTSである必要があります
Noah

この質問の複製に対する私の答えをチェックしてください。stackoverflow.com/questions/3868863/…マークされた答えは間違っていますが、私のものは機能します(コメント/投票もチェックする必要がある場合があります:)
iwein 2013年

回答:


101

必要ですSBT_OPTS、これが私の.bash_profileで使用するものです

export SBT_OPTS="-Xmx1536M -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M  -Duser.timezone=GMT"

更新: 2Gヒープスペースを取得するには、次を使用できます。

export SBT_OPTS="-Xmx2G -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M  -Duser.timezone=GMT"

注:SBTは最新バージョンである必要があります

古いバージョンにはsbt、これらの設定をオーバーライドするバグが含まれています。brew upgrade sbt最新sbtのMac用に使用します(brewインストールを想定)(Linux用のIDK)。https://github.com/sbt/sbt/issues/2945#issuecomment-277490848


1
ありがとうございました。実際、sbtプロセスのコマンドラインは期待どおりに変更さ-Xmx1546mれますが、visualvmに示すように、古いものはコマンドラインにまだ存在し、最大ヒープサイズは1.5GBに制限されています。

1
ソース制御されているSBT構成でこの環境設定を設定する方法はありますか?
ケビンメレディス

scalazソースを見てください。sbtというbashファイルがあり、必要なものすべてをロードします。別名、環境固有のgithub.com/scalaz/scalaz/blob/series/7.2.x/sbt
Noah

4
警告が表示されます:Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=4G; support was removed in 8.0
samthebest 2015年

1
@samthebest PermGenは基本的にJava8で削除されたため、これを含める必要はありません。
ノア

65

2015年3月の時点で、Homebrewを使用してOSXでsbtを使用している場合は、ファイルを編集する必要があります/usr/local/etc/sbtopts

例えば

# set memory options
#
#-mem   <integer>
-mem 2048

5
これは、env変数をいじくり回す代わりに、Windowsでもうまく機能するようです(ファイルはc:\ program files \ sbt \ confsの下にあります)。
ルチアーノ

2
Linuxでは/etc/sbt-launcher-packaging。にあります。
ロビングリーン

1
Ubuntu Artfulで、私はそれを見つけました/etc/sbt/sbtopts
Synesso 2018

このソリューションにより、JVMはすべての2GBメモリを事前に割り当てます。SBT_OPTS=-Xmx2G sbtSBTを開始するために使用する場合、必要に応じてヒープを最大2GBまで拡張します。
mgd

上記の@mikeのソリューションをご覧ください:stackoverflow.com/a/55706960/1199564
mgd

42

「sbt-mem23000run」は私のために働きます。


6
それは23Gbではありませんか..?
ベンハッチソン

1
@BenHutchisonこれはおそらくpaulpのsbtラッパーであり、元のsbtではありません
matanster 2016年

19

私は解決策を見つけました。JVMヒープサイズをどのように指定しても、SBT実行可能ファイルではすでにオーバーライドされているため、機能しません。

SBT実行可能ファイルには、次のような行があります。

. /usr/share/sbt/sbt-launch-lib.bash

だから私はファイルを編集しました:

  # run sbt
  execRunner "$java_cmd" \
    ${SBT_OPTS:-$default_sbt_opts} \
-   $(get_mem_opts $sbt_mem) \
    ${java_opts} \
    ${java_args[@]} \
    -jar "$sbt_jar" \
    "${sbt_commands[@]}" \
    "${residual_args[@]}"

-行を削除します。

これで、SBTを実行すると、JVMヒープサイズ設定が上書きされなくなります。@Noanの回答を使用して、ヒープサイズの設定を指定できます。

または代わりに:

sbt -J-Xmx4G -J-Xms4G


3
実はと思われるexport SBT_OPTS="..."には、~/.sbtconfig実際に作業を行います。
Erik Kaplun 2014年

15

Windowsでは、sbt 0.13.9.2の場合、必要なJAVA_OPTSjvmオプションに設定する必要があります。

> set JAVA_OPTS=-Xmx1G
> sbt assembly

sbt.batスクリプトからそのデフォルト値をロードするconf\sbtconfig.txtCFG_OPTSなく、使用するJAVA_OPTS一連の場合は代わりに。

からの関連する抜粋sbt.bat

rem FIRST we load the config file of extra options.
set FN=%SBT_HOME%\..\conf\sbtconfig.txt
set CFG_OPTS=
FOR /F "tokens=* eol=# usebackq delims=" %%i IN ("%FN%") DO (
  set DO_NOT_REUSE_ME=%%i
  rem ZOMG (Part #2) WE use !! here to delay the expansion of
  rem CFG_OPTS, otherwise it remains "" for this loop.
  set CFG_OPTS=!CFG_OPTS! !DO_NOT_REUSE_ME!
)

。。。(スキップ)。。。

rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config.
set _JAVA_OPTS=%JAVA_OPTS%
if "%_JAVA_OPTS%"=="" set _JAVA_OPTS=%CFG_OPTS%
:run
"%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %*

11

私はSBTの自作インストールでMacOSXでこのような問題を解決しようとしていました。自作でSBTをインストールした場合、/usr/local/bin/sbtファイルは次のようになりますので、わかりやすくなっています。

#!/bin/sh
test -f ~/.sbtconfig && . ~/.sbtconfig
exec java -Xmx512M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.12.3/libexec/sbt-launch.jar "$@"

これは、入力した設定がすべて保持されることを意味しますSBT_OPTS(-Xmxが優先されます)。さらに、スクリプトの最初の行は、コマンドが~/.sbtconfig存在する場合はそれを実行するため、SBTオプションをかなり使用している場合は、SBTオプションを配置する方がよい場合があります。にsource ~/.bash_profile変更を加えるたびに変更する必要はありませんSBT_OPTS


2
はい。これは私が$ HOME /.sbtconfigに持っているものです。export SBT_OPTS = "-XX:MaxPermSize = 512M -Xmx2G -Xms64M"そしてsbtを起動すると、ps auxを実行すると、/ usr / bin / java -Xmx512M -XX:MaxPermSize = 512M -Xmx2G -Xms64M -jar /が表示されます。 usr / local / Cellar / sbt / 0.13.0 / libexec / sbt-launch.jar
Adrian Rodriguez

しかし、私は以下の答えを見たばかりで、おそらくそのランチャーは別のタイプのセットアップ用です。私のセットアップは、自作パッケージを使用するMacに固有のものです。
アドリアンロドリゲス

2
Homebrew SBTでは、ヒープサイズを次の-memパラメータで構成する必要があります/usr/local/etc/sbtopts
Synesso 2015年

6

PowerShellからsbtを実行する場合はSBT_OPTs、次のように環境変数を設定します。

$env:SBT_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M"

次に、以下を実行します。

sbt

6

Windows上のSBTバージョン1.0.4の場合、デフォルトのJVM設定はsbt\conf\sbtconfig.txtファイルから取得ます。ここで値を編集するだけです。に変更-Xmx512M-Xmx2048Mます。

これは、SBTのJVMオプションの唯一のソースではありません。その他は、を調べることで見つけることができますsbt.bat。設定がどこから来ているかを診断する簡単な方法は、バッチファイルの次の行をコメントアウトすることです@echo off


注:これsbt\confは、ユーザーディレクトリではなく、のようにProgramFilesフォルダに配置されますC:\Program Files (x86)\sbt\conf
スマ

5

これを行う簡単な方法.jvmoptsは、プロジェクトのルートにあるファイルを使用することです(Lagom Frameworkのドキュメントから)。

 $ cat .jvmopts
 -Xms512M
 -Xmx4096M
 -Xss2M
 -XX:MaxMetaspaceSize=1024M

1
プロジェクトごとの設定も可能であるため、これは正解としてマークする必要があります。
mgd

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.