100 votes

Comment définir la taille du tas pour sbt ?

J'utilise SBT 0.12.0. J'ai lu d'autres réponses sur stack overflow et les ai suivies, mais aucune d'entre elles ne m'aide, par exemple :

  • créer ForkRun Je n'ai pas observé de processus de bifurcation pendant mon utilisation de sbt.
  • définir une variable d'environnement JAVA_OPTS - il est défini mais la ligne de commande du processus de sbt ne semble pas l'utiliser du tout.
  • sbt -J-Xmx2G ajoute le paramètre à la ligne de commande du processus sbt, cependant l'ancienne valeur -Xmx1536m est utilisé par sbt à la place du paramètre ajouté.

Est-ce que je rate quelque chose ? Comment puis-je définir la taille de la pile pour sbt 0.12, lorsque je fais à la fois des tests et des tests en ligne ? run ?

109voto

Noah Points 4831

Vous devez SBT_OPTS voici ce que j'utilise dans mon .bash_profile :

export SBT_OPTS="-Xmx1536M -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M  -Duser.timezone=GMT"

UPDATE : Pour obtenir vos 2G d'espace heap, vous pouvez utiliser ceci :

export SBT_OPTS="-Xmx2G -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M  -Duser.timezone=GMT"

NOTE : SBT DOIT ÊTRE LA DERNIÈRE VERSION

Les anciennes versions de sbt contiennent des bogues qui annulent ces paramètres, utilisez la fonction brew upgrade sbt pour les dernières sbt pour Mac (en supposant une installation par brew) (IDK pour Linux). https://github.com/sbt/sbt/issues/2945#issuecomment-277490848

73voto

Synesso Points 8865

A partir de mars 2015, si vous utilisez sbt sur OSX avec Homebrew alors vous devez éditer le fichier /usr/local/etc/sbtopts

par exemple

# set memory options
#
#-mem   <integer>
-mem 2048

47voto

GBY Points 73

"sbt -mem 23000 run" fonctionne pour moi.

22voto

J'ai trouvé la solution. Peu importe comment vous spécifiez la taille du tas de la JVM, cela ne fonctionnera jamais car l'exécutable SBT l'a déjà surchargé.

Il y a une ligne dans l'exécutable SBT qui dit :

. /usr/share/sbt/sbt-launch-lib.bash

J'ai donc édité le fichier :

  # run sbt
  execRunner "$java_cmd" \
    ${SBT_OPTS:-$default_sbt_opts} \
-   $(get_mem_opts $sbt_mem) \
    ${java_opts} \
    ${java_args[@]} \
    -jar "$sbt_jar" \
    "${sbt_commands[@]}" \
    "${residual_args[@]}"

Retirer le - ligne.

Maintenant, lorsque vous exécutez SBT, il ne remplacera plus vos paramètres de taille de tas de la JVM. Vous pouvez spécifier les paramètres de taille du tas en utilisant la réponse de @Noan.

Ou alternativement :

sbt -J-Xmx4G -J-Xms4G

16voto

mike Points 310

Un moyen rapide de le faire est d'utiliser un .jvmopts dans la racine de votre projet (à partir du fichier Documentation sur le cadre Lagom ):

 $ cat .jvmopts
 -Xms512M
 -Xmx4096M
 -Xss2M
 -XX:MaxMetaspaceSize=1024M

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