Mon application ne de grands tableaux de données de traitement et a besoin de plus de mémoire que la JVM donne par défaut. Je sais en Java il est spécifié par "-Xmx" option. Comment puis-je régler SBT à usage particulier "-Xmx" valeur d'exécuter une application avec "run" de l'action?
Réponses
Trop de publicités?Sbt a évolué un peu depuis le temps que l'autre réponses lorsqu'il est donné. Maintenant, vous pouvez définir les options .sbtconfig pour non fourchue processus:
-
De 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 "$@"
-
Réglez les options jvm pour éviter OOM (à la fois régulière 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 en cours 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 une tâche trop lourde pour un allongement des listes d'options, mais il pourrait aider si vous avez des projets différents avec des besoins différents.
Notez que CMSClassUnloadingEnabled de concert avec UseConcMarkSweepGC permet de garder le PermGen space clean, mais en fonction de ce que les cadres que vous utilisez, vous pouvez avoir un réel de fuite sur PermGen, qui finit par la force un redémarrage.
CEPENDANT, le ci-dessus ne fait rien pour la fourche processus.
Pour modifier les options java pour fourche processus, vous devez les spécifier dans la construction.scala (ou 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 à l'échelle mondiale, et il va mettre le custom JAVA_OPTS dans un sbt généré début de script