私のアプリケーションは大規模なデータ配列処理を行い、JVMがデフォルトで提供するよりも多くのメモリを必要とします。 Java「-Xmx」オプションで指定されています。特定の「-Xmx」値を使用して「run」アクションでアプリケーションを実行するようにSBTを設定するにはどうすればよいですか?
これを試して:
class ForkRun(info: ProjectInfo) extends DefaultProject(info) {
override def fork = Some(new ForkScalaRun {
override def runJVMOptions = super.runJVMOptions ++ Seq("-Xmx512m")
override def scalaJars = Seq(buildLibraryJar.asFile, buildCompilerJar.asFile)
})
}
分岐したプロセスについては、Build.scala をご覧ください。
分岐したプロセスのJavaオプションを変更するには、Build.scala(またはビルドに名前を付けたもの)で次のように指定する必要があります。
val buildSettings = Defaults.defaultSettings ++ Seq(
//…
javaOptions += "-Xmx1G",
//…
)
これにより、Java_OPTSをグローバルに変更せずに適切なオプションが得られます。andカスタムJava_OPTSを sbt generated start-script に配置します
non forked プロセスの場合、sbtバージョンに応じてsbtopts
またはsbtconfig
を介して設定するのが最も便利です。
Sbt 0.13.6以降 .sbtconfig
は非推奨 。次の行に沿って/usr/local/etc/sbtopts
を変更します。
-J-Xms512M
-J-Xmx3536M
-J-Xss1M
-J-XX:+CMSClassUnloadingEnabled
-J-XX:+UseConcMarkSweepGC
-J-XX:MaxPermSize=724M
-J-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
SBTプロジェクトのルートに.sbtopts
ファイルと同じ構文を使用して/usr/local/etc/sbtopts
ファイルを作成することもできます。これにより、プロジェクトは自己完結型になります。
sbt 0.13.6 の前に、 non forked プロセスの.sbtconfigのオプションを設定できます。
Sbtの場所を確認します。
$ which sbt
/usr/local/bin/sbt
内容を見てください:
$ cat /usr/local/bin/sbt
#!/bin/sh
test -f ~/.sbtconfig && . ~/.sbtconfig
exec Java ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.12.1/libexec/sbt-launch.jar "$@"
正しいjvmオプションを設定して、OOM(通常およびPermGenの両方)を防止します。
$ cat ~/.sbtconfig
SBT_OPTS="-Xms512M -Xmx3536M -Xss1M
-XX:+CMSClassUnloadingEnabled
-XX:+UseConcMarkSweepGC -XX:MaxPermSize=724M"
現在のsbtの実行に対してのみSBT_OPTSを設定したい場合は、Googol Shanが提案するenv SBT_OPTS=".." sbt
を使用できます。または、Sbt 12で追加されたオプションsbt -mem 2048
を使用できます。これは、オプションのリストが長くなると扱いにくくなりますが、ニーズの異なるプロジェクトがある場合に役立ちます。
UseConcMarkSweepGCと連携してCMSClassUnloadingEnabledを使用するとPermGenスペースをクリーンに保つことができますが、使用するフレームワークによってはPermGenで実際のリークが発生し、最終的に強制的に再起動することに注意してください。
Sbtバージョン12以降では、これに対するオプションがあります。
$sbt -mem 2048
Linuxシェルでsbtを実行する場合、次を使用できます。
env Java_OPTS="-Xmx512m" sbt run
これは、私のsbtプロジェクトを実行するために通常使用されるコマンドです。
.sbtconfig
は、SBT 0.13.6
以降では非推奨です。代わりに、次の方法で/usr/local/etc/sbtopts
でこれらのオプションを構成しました。
-J-Xms512M
-J-Xmx3536M
-J-Xss1M
-J-XX:+CMSClassUnloadingEnabled
-J-XX:+UseConcMarkSweepGC
-J-XX:MaxPermSize=724M
-J-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
環境変数で設定するには、Java_OPTSを使用します。
-J-Xオプションを使用して、個々のオプションをsbtします。 -J-Xmx2048 -J-XX:MaxPermSize = 512
Sbtの新しいバージョンには「-mem」オプションがあります。
私が知っている一つの方法があります。環境変数Java_OPTSを設定します。
Java_OPTS='-Xmx512m'
コマンドパラメータとしてこれを行う方法を見つけていません。
javaOptions += "-XX:MaxPermSize=1024"
上記の@iweinで参照されているbuild.sbtで、sbtを介してSpecs2テストを実行しているときにJava.lang.OutOfMemoryErrorがスローされるのを見て、私たちのために機能しました。
環境変数は_Java_OPTIONSであり、設定する必要があります。 _Java_OPTIONSを設定し、sbtを実行すると、sbtはJava_OPTIONSと値を使用してメッセージを表示します。
または、sbtまたは.scalaファイルでjavaOptionを設定できます。
javaOptions += "-Xmx1G"
Sbt Shellからshow javaOptionsを実行して、設定されている値を確認できます。
javaOptions in Test += "-Xmx1G"
これにより、テストのJVMオプションが設定されます。 jvm forking(fork in Test := true
)。
sbtを使用すると、次の名前のファイルでプロジェクトを実行するために必要なJVMオプションをリストできます。
.jvmopts
プロジェクトのルートで。次に、必要なJavaオプションを追加します
cat .jvmopts
-Xms512M
-Xmx4096M
-Xss2M
-XX:MaxMetaspaceSize=1024M
テストされ、Windows 10で動作します https://www.lagomframework.com/documentation/1.4.x/scala/JVMMemoryOnDev.html