回答:
これを試して:
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)
})
}
javaOptions
フォークされたJVMにのみ効果があることに注意してください(scala-sbt.org/0.13/docs/Forking.htmlを参照)
fork in run := ture
可能javaOptions
フォークされたプロセスについては、Build.scalaを見てください。
フォークされたプロセスのJavaオプションを変更するには、次のように、Build.scala(またはビルドに名前を付けたもの)でそれらを指定する必要があります。
val buildSettings = Defaults.defaultSettings ++ Seq(
//…
javaOptions += "-Xmx1G",
//…
)
これは、グローバルJAVA_OPTSを変更することなく、あなたに適切なオプションを提供します、そしてそれはでカスタムJAVA_OPTSを置く起動スクリプト生成SBT
以下のために非フォークのプロセスには、経由して設定を設定することが最も便利ですsbtopts
か、sbtconfig
あなたのsbtのバージョンによって異なります。
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
.sbtopts
ファイルと同じ構文を使用して、SBTプロジェクトのルートにファイルを作成することもでき/usr/local/etc/sbtopts
ます。これにより、プロジェクトは自己完結型になります。
sbt 0.13.6より前では、フォークされていないプロセスのオプションを.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 env SBT_OPTS=".." sbt
Shanの提案に従って使用できます。または、Sbt 12で追加されたオプションを使用できますsbt -mem 2048
。これは、オプションのリストが長くなると扱いにくくなりますが、ニーズが異なるさまざまなプロジェクトがある場合に役立つことがあります。
CMSClassUnloadingEnabledをUseConcMarkSweepGCと組み合わせて使用すると、PermGenスペースをクリーンに保つことができますが、使用するフレームワークによっては、PermGenで実際にリークが発生し、最終的に再起動が強制される場合があります。
.sbtopts
ファイルと同じ構文を使用してSBTプロジェクトのルートにファイルを作成することもでき/usr/local/etc/sbtopts
ます。これにより、プロジェクトは自己完結型になり、CIの状況で非常に便利です。
sbtバージョン12以降では、このオプションがあります:
$sbt -mem 2048
Not a valid command: mem (similar: set)
Linuxシェルでsbtを実行する場合、以下を使用できます。
env JAVA_OPTS="-Xmx512m" sbt run
これは、私のsbtプロジェクトを実行するために通常使用するコマンドです。
override def fork
上記の解決策が必要でした。(sbt 0.7.7)
.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
-J-Xss1M
大きなケースクラスの場合は少し低いです。
上記のjavaOptions += "-XX:MaxPermSize=1024"
@iweinで参照されているbuild.sbtのは、sbtを介してSpecs2テストを実行しているときにjava.lang.OutOfMemoryErrorがスローされるのを見ているときに機能しました。
javaOptions in Test += "-Xmx1G"
これにより、テストのJVMオプションが設定されます。jvmフォーク(fork in Test := true
)でも機能します。
build.sbt
ますか?
javaOptions in ThisBuild += "-Xmx1G"
またはを介してグローバルに指定しますjavaOptions in (ThisBuild, Test) += "-Xmx1G"
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
javaOptions += "-Xmx1G"