Mon application traite de grands tableaux de données et a besoin de plus de mémoire que la JVM n'en donne par défaut. Je sais qu'en Java, il est spécifié par l'option "-Xmx". Comment configurer SBT pour utiliser une valeur "-Xmx" particulière pour exécuter une application avec l'action "Exécuter"?
98
javaOptions += "-Xmx1G"
javaOptions
n'a d'effet que pour les JVM fourchus (voir scala-sbt.org/0.13/docs/Forking.html )fork in run := ture
permetjavaOptions
Pour les processus fourchus, vous devriez regarder Build.scala
Pour modifier les options java pour les processus forkés, vous devez les spécifier dans le Build.scala (ou ce que vous avez nommé votre build) comme ceci:
Cela vous donnera les options appropriées sans modifier globalement JAVA_OPTS, et cela mettra JAVA_OPTS personnalisé dans un script de démarrage généré par sbt
Pour les processus non fourchus , il est plus pratique de définir la configuration via
sbtopts
ou ensbtconfig
fonction de votre version sbt.Depuis sbt 0.13.6
.sbtconfig
est obsolète . Modifiez en/usr/local/etc/sbtopts
suivant ces lignes:Vous pouvez également créer un
.sbtopts
fichier à la racine de votre projet SBT en utilisant la même syntaxe que dans le/usr/local/etc/sbtopts
fichier. Cela rend le projet autonome.Avant sbt 0.13.6, vous pouviez définir les options dans .sbtconfig pour les processus non fourchus :
Vérifiez où se trouve sbt:
Regardez le contenu:
Définissez les options jvm correctes pour empêcher MOO (à la fois normal et PermGen):
Si vous souhaitez définir SBT_OPTS uniquement pour l'exécution actuelle de sbt, vous pouvez l'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 compliqué pour les listes d'options plus longues, mais cela peut aider si vous avez différents projets avec des besoins différents.Notez que CMSClassUnloadingEnabled de concert avec UseConcMarkSweepGC aide à garder l'espace PermGen propre, mais en fonction des frameworks que vous utilisez, vous pouvez avoir une fuite réelle sur PermGen, qui finit par forcer un redémarrage.
la source
.sbtopts
fichier à la racine de votre projet SBT en utilisant la même syntaxe que dans le/usr/local/etc/sbtopts
fichier. Cela rend votre projet autonome, ce qui peut être très pratique dans les situations CI.À partir de la version 12 de sbt, il existe une option pour cela:
la source
Not a valid command: mem (similar: set)
Si vous exécutez sbt sur un shell Linux, vous pouvez utiliser:
C'est ma commande habituellement utilisée pour exécuter mon projet sbt.
la source
override def fork
solution ci-dessus. (sbt 0.7.7).sbtconfig
est obsolète à partir de SBT0.13.6
. Au lieu de cela, j'ai configuré ces options/usr/local/etc/sbtopts
de la manière suivante:la source
-J-Xss1M
est un peu faible pour les grandes classes de cas, 4M semble être plus sûr.Il y a un moyen que je connais. Définissez la variable d'environnement JAVA_OPTS.
Je n'ai pas trouvé de moyen de faire cela en tant que paramètre de commande.
la source
Utilisez JAVA_OPTS pour définir avec la variable d'environnement.
Utilisez les options -JX pour sbt pour les options individuelles, par exemple -J-Xmx2048 -J-XX: MaxPermSize = 512
Les nouvelles versions de sbt ont une option "-mem".
la source
Le
javaOptions += "-XX:MaxPermSize=1024"
dans notre build.sbt comme référencé par @iwein ci-dessus a fonctionné pour nous quand nous voyions un java.lang.OutOfMemoryError levé lors de l'exécution de tests Specs2 via sbt.la source
La variable d'environnement est _JAVA_OPTIONS, qui doit être définie. Une fois que vous avez défini _JAVA_OPTIONS, et lorsque vous sbt, sbt affichera le message en utilisant JAVA_OPTIONS et les valeurs.
Vous pouvez également définir javaOption dans le fichier sbt ou .scala, par exemple
À partir du shell sbt, vous pouvez exécuter show javaOptions pour voir les valeurs définies.
la source
Cela définit les options JVM pour les tests. Fonctionne également avec jvm forking (
fork in Test := true
).la source
build.sbt
?javaOptions in ThisBuild += "-Xmx1G"
oujavaOptions in (ThisBuild, Test) += "-Xmx1G"
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 ajoutez les options java souhaitées
il est testé et fonctionne sous windows 10 https://www.lagomframework.com/documentation/1.4.x/scala/JVMMemoryOnDev.html
la source