Meine Anwendung verarbeitet große Datenfelder und benötigt standardmäßig mehr Speicher als JVM. Ich weiß, dass es in Java durch die Option "-Xmx" angegeben wird. Wie richte ich SBT so ein, dass ein bestimmter Wert "-Xmx" zum Ausführen einer Anwendung mit der Aktion "Ausführen" verwendet wird?
97
javaOptions += "-Xmx1G"
javaOptions
nur für gegabelte JVMs gilt (siehe scala-sbt.org/0.13/docs/Forking.html )fork in run := ture
ermöglichtjavaOptions
Für gegabelte Prozesse sollten Sie sich Build.scala ansehen
Um die Java-Optionen für gegabelte Prozesse zu ändern, müssen Sie sie in der Build.scala (oder wie auch immer Sie Ihren Build genannt haben) wie folgt angeben:
Dadurch erhalten Sie die richtigen Optionen, ohne JAVA_OPTS global zu ändern, und es werden benutzerdefinierte JAVA_OPTS in ein von sbt generiertes Startskript eingefügt
Für nicht gegabelte Prozesse ist es am bequemsten, die Konfiguration über
sbtopts
odersbtconfig
abhängig von Ihrer sbt-Version festzulegen.Da sbt 0.13.6
.sbtconfig
veraltet ist . Ändern Sie/usr/local/etc/sbtopts
in diese Richtung:Sie können auch eine
.sbtopts
Datei im Stammverzeichnis Ihres SBT-Projekts mit derselben Syntax wie in der/usr/local/etc/sbtopts
Datei erstellen. Dies macht das Projekt in sich geschlossen.Vor sbt 0.13.6 konnten Sie die Optionen in .sbtconfig für nicht gegabelte Prozesse festlegen :
Überprüfen Sie, wo sbt ist:
Schauen Sie sich den Inhalt an:
Stellen Sie die richtigen JVM-Optionen ein, um OOM zu verhindern (sowohl reguläres als auch PermGen):
Wenn Sie SBT_OPTS nur für die aktuelle Ausführung von sbt festlegen möchten, können Sie diese
env SBT_OPTS=".." sbt
wie von Googol Shan vorgeschlagen verwenden. Oder Sie können die in Sbt 12 hinzugefügte Option verwenden :sbt -mem 2048
. Dies wird für längere Listen von Optionen unhandlich, kann jedoch hilfreich sein, wenn Sie unterschiedliche Projekte mit unterschiedlichen Anforderungen haben.Beachten Sie, dass CMSClassUnloadingEnabled in Verbindung mit UseConcMarkSweepGC dazu beiträgt, den PermGen-Speicherplatz sauber zu halten. Abhängig von den von Ihnen verwendeten Frameworks kann es jedoch zu einem tatsächlichen Leck in PermGen kommen, das möglicherweise einen Neustart erzwingt.
quelle
.sbtopts
Datei im Stammverzeichnis Ihres SBT-Projekts mit derselben Syntax wie in der/usr/local/etc/sbtopts
Datei erstellen. Dies macht Ihr Projekt in sich geschlossen, was in CI-Situationen sehr praktisch sein kann.Ab sbt 12 gibt es hierfür eine Option:
quelle
Not a valid command: mem (similar: set)
Wenn Sie sbt unter Linux-Shell ausführen, können Sie Folgendes verwenden:
Dies ist mein normalerweise verwendeter Befehl zum Ausführen meines sbt-Projekts.
quelle
override def fork
obige Lösung. (sbt 0.7.7).sbtconfig
ist ab SBT veraltet0.13.6
. Stattdessen habe ich diese Optionen/usr/local/etc/sbtopts
folgendermaßen konfiguriert :quelle
-J-Xss1M
ist für große Fallklassen etwas niedrig, 4M scheint sicherer zu sein.Ich kenne einen Weg. Setzen Sie die Umgebungsvariable JAVA_OPTS.
Ich habe keine Möglichkeit gefunden, dies als Befehlsparameter zu tun.
quelle
Verwenden Sie JAVA_OPTS zum Festlegen mit Umgebungsvariablen.
Verwenden Sie -JX-Optionen, um einzelne Optionen zu sbt, z. B. -J-Xmx2048 -J-XX: MaxPermSize = 512
Neuere Versionen von sbt haben die Option "-mem".
quelle
Die
javaOptions += "-XX:MaxPermSize=1024"
in unserer build.sbt, auf die oben von @iwein verwiesen wurde, funktionierte für uns, als wir einen java.lang.OutOfMemoryError sahen, der beim Ausführen von Specs2-Tests durch sbt ausgelöst wurde.quelle
Die Umgebungsvariable ist _JAVA_OPTIONS, die festgelegt werden muss. Sobald Sie _JAVA_OPTIONS festgelegt haben und sbt, zeigt sbt die Nachricht mit JAVA_OPTIONS und den Werten an.
Alternativ können Sie javaOption in der Datei sbt oder .scala festlegen, z
In der sbt-Shell können Sie show javaOptions ausführen, um die festgelegten Werte anzuzeigen.
quelle
Dadurch werden die JVM-Optionen für Tests festgelegt. Funktioniert auch mit jvm forking (
fork in Test := true
).quelle
build.sbt
?javaOptions in ThisBuild += "-Xmx1G"
oderjavaOptions in (ThisBuild, Test) += "-Xmx1G"
Mit sbt können Sie die JVM-Optionen auflisten, die Sie zum Ausführen Ihres Projekts in einer Datei mit dem Namen benötigen
.jvmopts
in der Wurzel Ihres Projekts. Fügen Sie dann die gewünschten Java-Optionen hinzu
Es wurde getestet und funktioniert unter Windows 10 https://www.lagomframework.com/documentation/1.4.x/scala/JVMMemoryOnDev.html
quelle