web-dev-qa-db-ja.com

SBTで「実行」アクションを使用してアプリケーションを実行するためのJVM最大ヒープサイズ「-Xmx」を指定する方法

私のアプリケーションは大規模なデータ配列処理を行い、JVMがデフォルトで提供するよりも多くのメモリを必要とします。 Java「-Xmx」オプションで指定されています。特定の「-Xmx」値を使用して「run」アクションでアプリケーションを実行するようにSBTを設定するにはどうすればよいですか?

91
Ivan

これを試して:

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)
    })
}
16
Arne

分岐したプロセスについては、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のオプションを設定できます。

  1. Sbtの場所を確認します。

    $ which sbt
    /usr/local/bin/sbt
    
  2. 内容を見てください:

    $ 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 "$@"
    
  3. 正しい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で実際のリークが発生し、最終的に強制的に再起動することに注意してください。

107
iwein

Sbtバージョン12以降では、これに対するオプションがあります。

$sbt -mem 2048 
65
scrapcodes

Linuxシェルでsbtを実行する場合、次を使用できます。

env Java_OPTS="-Xmx512m" sbt run

これは、私のsbtプロジェクトを実行するために通常使用されるコマンドです。

41
Googol Shan

.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
21
omnomnom

環境変数で設定するには、Java_OPTSを使用します。

-J-Xオプションを使用して、個々のオプションをsbtします。 -J-Xmx2048 -J-XX:MaxPermSize = 512

Sbtの新しいバージョンには「-mem」オプションがあります。

7
Brett

私が知っている一つの方法があります。環境変数Java_OPTSを設定します。

Java_OPTS='-Xmx512m'

コマンドパラメータとしてこれを行う方法を見つけていません。

6
Synesso

javaOptions += "-XX:MaxPermSize=1024"上記の@iweinで参照されているbuild.sbtで、sbtを介してSpecs2テストを実行しているときにJava.lang.OutOfMemoryErrorがスローされるのを見て、私たちのために機能しました。

4
Pete Neisen

環境変数は_Java_OPTIONSであり、設定する必要があります。 _Java_OPTIONSを設定し、sbtを実行すると、sbtはJava_OPTIONSと値を使用してメッセージを表示します。

または、sbtまたは.scalaファイルでjavaOptionを設定できます。

javaOptions += "-Xmx1G"

Sbt Shellからshow javaOptionsを実行して、設定されている値を確認できます。

3
Sajive Kumar
    javaOptions in Test += "-Xmx1G"

これにより、テストのJVMオプションが設定されます。 jvm forking(fork in Test := true)。

1
VasiliNovikov

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

1
Ar maj