SBT 0.12.0を使用しています。私はスタックオーバーフローに関する他の答えを読んでそれに従いましたが、それらのどれも助けません、例えば:
ForkRun
class-sbtの使用中に分岐プロセスを観察していませんJava_OPTS
を設定します-設定されていますが、sbtのプロセスコマンドラインはそれをまったく使用していないようです。sbt -J-Xmx2G
はsbtプロセスのコマンドラインにパラメーターを追加しますが、sbtは追加されたパラメーターの代わりに古い値-Xmx1536m
を使用します。何か不足していますか?テストとrun
の両方を行うときに、sbt 0.12のヒープサイズを設定するにはどうすればよいですか?
私は解決策を見つけました。 JVMヒープサイズの指定方法に関係なく、SBT実行可能ファイルはすでにオーバーライドされているため、JVMヒープサイズは機能しません。
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
SBT_OPTS
が必要です。これは。bash_profileで使用するものです。
export SBT_OPTS="-Xmx1536M -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M -Duser.timezone=GMT"
UPDATE:2Gヒープスペースを取得するには、これを使用できます:
export SBT_OPTS="-Xmx2G -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M -Duser.timezone=GMT"
注:SBTは最新バージョンでなければなりません
sbt
の古いバージョンには、これらの設定を上書きするバグが含まれています。最新のsbt
にはbrew upgrade sbt
を使用します(brewインストールを想定)(LinuxのIDK)。 https://github.com/sbt/sbt/issues/2945#issuecomment-277490848
2015年3月現在、OSXでHomebrewでsbtを使用している場合、ファイル/usr/local/etc/sbtopts
を編集する必要があります
例えば.
# set memory options
#
#-mem <integer>
-mem 2048
「sbt -mem 23000 run」が機能します。
Windowsでは、sbt 0.13.9.2の場合、Java_OPTS
を必要なjvmオプションに設定する必要があります。
> set Java_OPTS=-Xmx1G
> sbt Assembly
sbt.bat
スクリプトは、デフォルトをconf\sbtconfig.txt
からCFG_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 %*
私はSBTの自作インストールでMac OS Xでこのような問題を解決しようとしていました。 homebrewを使用して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
する必要はありません
PowerShellからsbtを実行する場合、次のようにSBT_OPTs
環境変数を設定します。
$env:SBT_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M"
次に実行します:
sbt
SBTバージョン1.0.4の場合Windowsの場合デフォルトJVM設定はsbt\conf\sbtconfig.txt
から取得ファイル。ここで値を編集するだけです。 -Xmx512M
を-Xmx2048M
に変更します。
これは、SBTのJVMオプションの唯一のソースではありません。その他は、sbt.bat
を調べることで見つけることができます。診断を行う簡単な方法は、設定がどこから来ているのか、バッチファイルの@echo off
という行をコメントアウトすることです。
簡単な方法は、プロジェクトのルートにある.jvmopts
ファイルを使用することです( Lagom Framework documentation から):
$ cat .jvmopts
-Xms512M
-Xmx4096M
-Xss2M
-XX:MaxMetaspaceSize=1024M
私の場合、私のサービスの設定は環境変数SBT_OPTS
とJava_OPTS
を上書きしていました。 build.sbt
で以下を設定することにより、制限を設定できました。
javaOptions in Universal ++= Seq(
"-J-Xms1g",
"-J-Xmx2g")
リファレンス: https://www.scala-sbt.org/sbt-native-packager/archetypes/Java_app/customize.html