web-dev-qa-db-ja.com

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

SBT 0.12.0を使用しています。私はスタックオーバーフローに関する他の答えを読んでそれに従いましたが、それらのどれも助けません、例えば:

  • create ForkRun class-sbtの使用中に分岐プロセスを観察していません
  • 環境変数Java_OPTSを設定します-設定されていますが、sbtのプロセスコマンドラインはそれをまったく使用していないようです。
  • sbt -J-Xmx2Gはsbtプロセスのコマンドラインにパラメーターを追加しますが、sbtは追加されたパラメーターの代わりに古い値-Xmx1536mを使用します。

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

80
user972946

私は解決策を見つけました。 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

20
user972946

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

90
Noah

2015年3月現在、OSXHomebrewでsbtを使用している場合、ファイル/usr/local/etc/sbtoptsを編集する必要があります

例えば.

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

「sbt -mem 23000 run」が機能します。

40
GBY

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 %*
15
Choy

私は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する必要はありません

11

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

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

次に実行します:

sbt
6
sungiant

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

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

4
Jarekczek

簡単な方法は、プロジェクトのルートにある.jvmoptsファイルを使用することです( Lagom Framework documentation から):

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

私の場合、私のサービスの設定は環境変数SBT_OPTSJava_OPTSを上書きしていました。 build.sbtで以下を設定することにより、制限を設定できました。

javaOptions in Universal ++= Seq(
  "-J-Xms1g",
  "-J-Xmx2g")

リファレンス: https://www.scala-sbt.org/sbt-native-packager/archetypes/Java_app/customize.html

0
Cassio