Comment spécifier la taille maximale de pile JVM « -Xmx » pour l'exécution d'une application avec l'action « run » dans SBT?
Question
Mon application ne grands tableaux de données et le traitement a besoin de plus de mémoire que JVM donne par défaut. Je sais en Java, il est spécifié par l'option « -Xmx ». Comment puis-je configurer SBT pour utiliser la valeur « -Xmx » notamment pour exécuter une application à l'action « run »?
La solution
Essayez ceci:
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)
})
}
Autres conseils
Pour les processus fourchues, vous devriez regarder Build.scala
Pour modifier les options java pour les processus fourchues, vous devez les indiquer dans le Build.scala (ou tout ce que vous avez nommé votre build) comme ceci:
val buildSettings = Defaults.defaultSettings ++ Seq(
//…
javaOptions += "-Xmx1G",
//…
)
Cela vous donnera les options appropriées sans modifier JAVA_OPTS globalement, et il sera mis JAVA_OPTS personnalisés dans un SBT start-script généré
non fourchue traite le plus pratique pour définir la configuration via sbtopts
ou sbtconfig
en fonction de votre version SBT.
Depuis SBT 0.13.6 .sbtconfig
est dépréciée . 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 fichier .sbtopts
dans la racine de votre projet SBT en utilisant la même syntaxe que dans le fichier /usr/local/etc/sbtopts
. Cela rend le projet autonome.
Avant SBT 0.13.6 vous pouvez définir les options .sbtconfig pour non fourchues processus:
-
Vérifier 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 OOM (à la fois régulière et PermGen):
$ cat ~/.sbtconfig SBT_OPTS="-Xms512M -Xmx3536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:MaxPermSize=724M"
Si vous voulez SBT_OPTS ensemble que pour l'exécution en cours de SBT vous pouvez utiliser env SBT_OPTS=".." sbt
comme suggéré par Googol Shan. Vous pouvez également utiliser l'option ajoutée dans la société SBT 12: sbt -mem 2048
. Cela devient difficile à manier pour les plus longues listes d'options, mais il pourrait aider si vous avez différents projets avec des besoins différents.
Notez que CMSClassUnloadingEnabled de concert avec UseConcMarkSweepGC aide à garder l'espace propre PermGen, mais en fonction de ce que vous vous CADRES utiliser pourriez avoir une fuite réelle sur PermGen, qui force finalement un redémarrage.
Dans la version 12 SBT partir il y a une option pour ceci:
$sbt -mem 2048
Si vous exécutez SBT sur shell linux, vous pouvez utiliser:
env JAVA_OPTS="-Xmx512m" sbt run
Ceci est ma commande habituellement utilisé pour exécuter mon projet SBT.
.sbtconfig
est dépréciée commence avec SBT 0.13.6
. Au lieu de cela, j'ai configuré ces options /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 le réglage avec la variable d'environnement.
Utilisez les options -J-X à SBT pour les options individuelles, par exemple -J-Xmx2048 -J-XX: MaxPermSize = 512
Les versions plus récentes de SBT ont une option "-mem".
Il y a une façon que je connaisse. Définissez les JAVA_OPTS variables d'environnement.
JAVA_OPTS='-Xmx512m'
Je n'ai pas trouvé un moyen de le faire en tant que paramètre de commande.
Le javaOptions += "-XX:MaxPermSize=1024"
dans notre build.sbt comme référencé par @iwein ci-dessus a travaillé pour nous quand nous voyons un java.lang.OutOfMemoryError jeté lors de l'exécution des tests Specs2 par SBT.
La variable d'environnement est _JAVA_OPTIONS, qui doit être réglé. Une fois que vous mis _JAVA_OPTIONS, et quand vous SBT, SBT affiche le message en utilisant JAVA_OPTIONS et les valeurs.
Sinon, vous pouvez définir javaOption dans le SBT ou .scala fichier par exemple
javaOptions += "-Xmx1G"
De SBT vous pouvez exécuter shell javaOptions show pour voir les valeurs qui sont définies.
javaOptions in Test += "-Xmx1G"
Ceci définit les options JVM pour les tests. Fonctionne également avec jvm fork (fork in Test := true
).
SBT vous permet de lister les options JVM dont vous avez besoin pour exécuter votre projet sur un fichier nommé
.jvmopts
à la racine de votre projet. puis ajouter les options 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