Wie man JVM maximale Heap-Größe „-Xmx“ angeben, für eine Anwendung mit „run“ Aktion in SBT läuft?

StackOverflow https://stackoverflow.com/questions/3868863

  •  28-09-2019
  •  | 
  •  

Frage

Meine Anwendung hat große Daten Arrays Verarbeitung und mehr Speicher benötigt als JVM standardmäßig gibt. Ich weiß, dass in Java durch „-Xmx“ Option angegeben wird. Wie richte ich SBT oben bestimmten „-Xmx“ Wert zu verwenden, um eine Anwendung mit „run“ Aktion ausführen?

War es hilfreich?

Lösung

Versuchen Sie diese:

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

Andere Tipps

Für gegabelt Prozesse, die Sie bei Build.scala aussehen sollte

Um die Java-Optionen für gegabelt Prozesse ändern Sie müssen sie in der Build.scala angeben (oder was auch immer Sie haben Ihre Build genannt) wie folgt aus:

val buildSettings = Defaults.defaultSettings ++ Seq(
   //…
   javaOptions += "-Xmx1G",
   //…
)

Dies gibt Ihnen die richtigen Optionen ohne JAVA_OPTS global zu ändern, und wird es benutzerdefinierte JAVA_OPTS in einem sbt generiert Start-Skript

nicht gegabelt Prozesse ist es am bequemsten, die Konfiguration über sbtopts oder sbtconfig je nach sbt Version einzustellen.

Da sbt 0.13.6 .sbtconfig ist veraltet . Ändern /usr/local/etc/sbtopts entlang dieser Linien:

-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

Sie können auch erstellen eine .sbtopts-Datei im Stammverzeichnis des SBT-Projekt die gleiche Syntax wie in der /usr/local/etc/sbtopts-Datei. Das macht das Projekt eigenständig.

Vor sbt 0.13.6 Sie die Optionen in .sbtconfig für nicht gegabelt Prozesse setzen können:

  1. Überprüfen Sie, wo sbt ist:

    $ which sbt
    /usr/local/bin/sbt
    
  2. Blick auf den Inhalt:

    $ 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. Stellen Sie die richtigen JVM-Optionen OOM (reguläre und PermGen) zu verhindern:

    $ cat ~/.sbtconfig
    SBT_OPTS="-Xms512M -Xmx3536M -Xss1M 
     -XX:+CMSClassUnloadingEnabled 
     -XX:+UseConcMarkSweepGC -XX:MaxPermSize=724M"
    

Wenn Sie nur für den aktuellen Lauf zu Satz SBT_OPTS wollen sbt Sie env SBT_OPTS=".." sbt verwenden können, wie von Googol Shan vorgeschlagen. Oder können Sie die Option hinzugefügt, in Sbt 12: sbt -mem 2048. Dies wird für längere Listen von Optionen unhandlich, aber es könnte helfen, wenn Sie mit unterschiedlichen Bedürfnissen verschiedene Projekte haben.

Beachten Sie, dass CMSClassUnloadingEnabled im Konzert mit UseConcMarkSweepGC hilft sauber die PermGen Raum zu halten, aber je nachdem, was Frameworks Sie verwenden Sie können eine tatsächliche Leck auf PermGen haben, die schließlich einen Neustart zwingt.

In sbt Version 12 an gibt es eine Option für diese:

$sbt -mem 2048 

Wenn Sie sbt auf Linux-Shell ausführen, können Sie verwenden:

env JAVA_OPTS="-Xmx512m" sbt run

Das ist mein meist gebrauchter Befehl meines sbt Projekt auszuführen.

.sbtconfig mit SBT 0.13.6 deprecated starten. Stattdessen habe ich konfiguriert diese Optionen in /usr/local/etc/sbtopts auf folgende Weise:

-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

Verwenden JAVA_OPTS für mit Umgebungsvariable.

Mit -J-X-Optionen für einzelne Optionen SBT, z.B. -J-Xmx2048 -J-XX: MaxPermSize = 512

Neuere Versionen von sbt haben ein „-mem“ -Option.

Da ist ein Weg, den ich kenne. Legen Sie die Umgebungsvariable JAVA_OPTS.

JAVA_OPTS='-Xmx512m'

Ich habe nicht einen Weg gefunden, dies als Befehlsparameter zu tun.

Die javaOptions += "-XX:MaxPermSize=1024" in unserem build.sbt wie @iwein verwiesen oben für uns gearbeitet, wenn wir einen java.lang.OutOfMemoryError beim Laufen Specs2 Tests durch sbt geworfen zu sehen waren.

Die Umgebungsvariable ist _JAVA_OPTIONS, die eingestellt werden muss. Sobald Sie setzen _JAVA_OPTIONS, und wenn Sie SBT, zeigt sbt die Nachricht JAVA_OPTIONS und die Werte mit.

Alternativ können Sie javaOption im sbt gesetzt oder .scala Datei z

javaOptions += "-Xmx1G"

Von sbt Shell Sie zeigen javaOptions laufen konnten die Werte, um zu sehen, die gesetzt werden.

    javaOptions in Test += "-Xmx1G"

Damit wird die JVM-Optionen für Tests. Funktioniert auch mit Jvm Forking (fork in Test := true).

sbt können Sie listen die JVM-Optionen müssen Sie Ihr Projekt auf einer Datei auszuführen Namen

.jvmopts

in der Wurzel Ihres Projektes. die Java-Optionen fügen Sie dann, dass Sie möchten

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

wird es getestet und funktioniert in Windows 10 https://www.lagomframework.com/documentation/1.4.x/ scala / JVMMemoryOnDev.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top