Comment spécifier la taille maximale de pile JVM « -Xmx » pour l'exécution d'une application avec l'action « run » dans SBT?

StackOverflow https://stackoverflow.com/questions/3868863

  •  28-09-2019
  •  | 
  •  

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 »?

Était-ce utile?

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:

  1. 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. 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top