Mon application traite de grandes baies de données et nécessite plus de mémoire que la JVM par défaut. Je sais que Java est spécifié par l'option "-Xmx". Comment configurer SBT pour qu'il utilise une valeur "-Xmx" particulière pour l'exécution d'une application avec une action "run"?
Essaye ça:
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)
})
}
Pour les processus forkés, vous devriez regarder Build.scala
Pour modifier les options Java) des processus forkés, vous devez les spécifier dans le fichier Build.scala (ou ce que vous avez nommé votre construction), comme suit:
val buildSettings = Defaults.defaultSettings ++ Seq(
//…
javaOptions += "-Xmx1G",
//…
)
Cela vous donnera les options appropriées sans modifier Java_OPTS globalement, et, il mettra Java_OPTS personnalisé dans un script de démarrage généré par sbt
Pour les traitements non forkés , il est plus pratique de définir la configuration via sbtopts
ou sbtconfig
en fonction de votre version de sbt.
Depuis sbt 0.13.6 .sbtconfig
est obsolète . Modifier /usr/local/etc/sbtopts
le long de ces lignes:
-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
Vous pouvez également créer un .sbtopts
fichier dans la racine de votre projet SBT en utilisant la même syntaxe que dans le fichier /usr/local/etc/sbtopts
fichier. Cela rend le projet autonome.
Avant sbt 0.13.6 , vous pouvez définir les options dans .sbtconfig pour non forké processus:
Vérifiez où sbt est:
$ which sbt
/usr/local/bin/sbt
Regardez le contenu:
$ 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 "$@"
Définissez les options jvm correctes pour empêcher le MOO (normal et PermGen):
$ cat ~/.sbtconfig
SBT_OPTS="-Xms512M -Xmx3536M -Xss1M
-XX:+CMSClassUnloadingEnabled
-XX:+UseConcMarkSweepGC -XX:MaxPermSize=724M"
Si vous souhaitez définir SBT_OPTS uniquement pour l'exécution courante de sbt, vous pouvez utiliser env SBT_OPTS=".." sbt
comme suggéré par Googol Shan. Ou vous pouvez utiliser l'option ajoutée dans Sbt 12: sbt -mem 2048
. Cela devient difficile à manier pour des listes d'options plus longues, mais cela peut être utile si vous avez différents projets avec des besoins différents.
Notez que CMSClassUnloadingEnabled, de concert avec UseConcMarkSweepGC, permet de garder l’espace PermGen propre. Toutefois, en fonction des frameworks que vous utilisez, vous pourriez avoir une fuite réelle sur PermGen, ce qui forcerait éventuellement un redémarrage.
Dans la version 12 de sbt, il existe une option pour cela:
$sbt -mem 2048
Si vous utilisez sbt sur linux Shell, vous pouvez utiliser:
env Java_OPTS="-Xmx512m" sbt run
Ceci est ma commande habituellement utilisée pour exécuter mon projet sbt.
.sbtconfig
est obsolète à partir de SBT 0.13.6
. Au lieu de cela, j'ai configuré ces options dans /usr/local/etc/sbtopts
de la manière suivante:
-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
Utilisez Java_OPTS pour la configuration avec une variable d’environnement.
Utilisez les options -J-X pour définir des options individuelles, par exemple. -J-Xmx2048 -J-XX: MaxPermSize = 512
Les versions les plus récentes de sbt ont une option "-mem".
Il y a une façon que je connaisse. Définissez la variable d'environnement Java_OPTS.
Java_OPTS='-Xmx512m'
Je n'ai pas trouvé de moyen de le faire en tant que paramètre de commande.
Le javaOptions += "-XX:MaxPermSize=1024"
_ dans notre build.sbt, comme indiqué par @iwein ci-dessus, a fonctionné pour nous lorsque nous voyions une erreur Java.lang.OutOfMemoryError lors de l'exécution des tests Specs2 via sbt.
La variable d'environnement est _Java_OPTIONS, qui doit être définie. Une fois que vous avez défini _Java_OPTIONS et lorsque vous définissez sbt, sbt affichera le message à l'aide de Java_OPTIONS et des valeurs.
Vous pouvez également définir javaOption dans le fichier sbt ou .scala, par exemple.
javaOptions += "-Xmx1G"
Depuis sbt Shell, vous pouvez lancer show javaOptions pour voir les valeurs définies.
javaOptions in Test += "-Xmx1G"
Ceci définit les options de la machine virtuelle Java pour les tests. Fonctionne aussi avec jvm forgeage (fork in Test := true
).
sbt vous permet de lister les options JVM nécessaires à l’exécution de votre projet sur un fichier nommé
.jvmopts
à la racine de votre projet. puis ajoutez les Java que vous voulez
cat .jvmopts
-Xms512M
-Xmx4096M
-Xss2M
-XX:MaxMetaspaceSize=1024M
il est testé et fonctionne sous Windows 10 https://www.lagomframework.com/documentation/1.4.x/scala/JVMMemoryOnDev.html