100 votes

Comment spécifier la taille maximale du tas de la JVM "-Xmx" pour l'exécution d'une application avec "exécuter" dans le SBT?

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?

120voto

iwein Points 4957

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:

  1. De vérifier où sbt est:

    $ which sbt
    /usr/local/bin/sbt
    
  2. 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 "$@"
    
  3. 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

69voto

scrapcodes Points 381

Dans sbt version 12, il y est une option pour cela:

$sbt -mem 2048 

45voto

Googol Shan Points 592

Si vous exécutez sbt sur linux, shell, vous pouvez utiliser:

env JAVA_OPTS="-Xmx512m" sbt run

C'est ma habituellement utilisé la commande à exécuter mon sbt projet.

17voto

Arne Points 866

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)
    })
}

7voto

Brett Points 544

Utilisation JAVA_OPTS pour le réglage avec la variable d'environnement.

Utilisez -J-X options de sbt pour chacune des options, par exemple -J-Xmx2048 -J-XX:MaxPermSize=512

Des versions plus récentes de sbt ont un "mem".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X