Comment définir la taille de tas pour sbt?

J’utilise SBT 0.12.0. J’ai lu d’autres réponses sur le dépassement de stack et je les ai suivies, mais aucune n’aide, par exemple:

  • créer la classe ForkRun – Je n’ai pas observé de processus en fourchette lors de mon utilisation de sbt
  • définir la variable d’environnement JAVA_OPTS – elle est définie mais la ligne de commande de processus de sbt ne semble pas l’utiliser du tout.
  • sbt -J-Xmx2G ajoute le paramètre à la ligne de commande du processus sbt. Toutefois, l’ancienne valeur -Xmx1536m est utilisée par sbt au lieu du paramètre ajouté.

Est-ce que je manque quelque chose? Comment définir la taille du tas pour sbt 0.12, à la fois en test et en run ?

Vous avez besoin de SBT_OPTS , voici ce que j’utilise dans mon fichier .bash_profile:

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

MISE À JOUR: Pour obtenir votre espace de 2G, vous pouvez utiliser ceci:

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

NOTE: SBT DOIT ÊTRE DERNIÈRE VERSION

Les anciennes versions de sbt contiennent des bogues qui remplacent ces parameters, utilisent brew upgrade sbt pour la dernière version de sbt pour Mac (en supposant une installation par armsage) (IDK pour Linux). https://github.com/sbt/sbt/issues/2945#issuecomment-277490848

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

par exemple

 # set memory options # #-mem  -mem 2048 

“sbt -mem 23000 run” fonctionne pour moi.

J’ai trouvé la solution. Quelle que soit la manière dont vous spécifiez la taille du segment de mémoire JVM, cela ne fonctionnera jamais car le fichier exécutable de SBT a déjà été remplacé.

Il y a une ligne dans l’exécutable de 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[@]}" 

Retirez la ligne.

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

Ou bien:

sbt -J-Xmx4G -J-Xms4G

Sur Windows, pour sbt 0.13.9.2, vous devez définir JAVA_OPTS sur les options jvm souhaitées.

 > set JAVA_OPTS=-Xmx1G > sbt assembly 

Le script sbt.bat charge ses valeurs par défaut de conf\sbtconfig.txt dans CFG_OPTS mais utilisera JAVA_OPTS place s’il est défini.

Extraits pertinents de sbt.bat :

 rem FIRST we load the config file of extra options. set FN=%SBT_HOME%\..\conf\sbtconfig.txt set CFG_OPTS= FOR /F "tokens=* eol=# usebackq delims=" %%i IN ("%FN%") DO ( set DO_NOT_REUSE_ME=%%i rem ZOMG (Part #2) WE use !! here to delay the expansion of rem CFG_OPTS, otherwise it remains "" for this loop. set CFG_OPTS=!CFG_OPTS! !DO_NOT_REUSE_ME! ) 

. . . (sauter) . .

 rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config. set _JAVA_OPTS=%JAVA_OPTS% if "%_JAVA_OPTS%"=="" set _JAVA_OPTS=%CFG_OPTS% :run "%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %* 

Je cherchais à résoudre un problème comme celui-ci sous Mac OS X avec une installation homebrew de SBT. Si vous avez installé SBT via homebrew, vous êtes dans le coup puisque le fichier /usr/local/bin/sbt ressemble à

 #!/bin/sh test -f ~/.sbtconfig && . ~/.sbtconfig exec java -Xmx512M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.12.3/libexec/sbt-launch.jar "$@" 

Cela signifie que tous les parameters que vous avez placés dans SBT_OPTS (votre -Xmx aura la priorité). De plus, la première ligne du script exécutera toutes les commandes de ~/.sbtconfig si elles existent, donc il serait peut-être préférable de placer vos options SBT si vous jouez un peu avec elles. Vous n’aurez pas à source ~/.bash_profile chaque fois que vous apporterez une modification à SBT_OPTS

Si vous exécutez sbt depuis PowerShell, définissez la variable d’environnement SBT_OPTs , comme SBT_OPTs :

 $env:SBT_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M" 

Puis lancez:

 sbt 

Pour SBT version 1.0.4 sous Windows, les parameters JVM par défaut proviennent du fichier sbt\conf\sbtconfig.txt . Modifiez simplement les valeurs ici. Changez -Xmx512M à -Xmx2048M .

Ce n’est pas la seule source d’options JVM pour SBT. D’autres peuvent être trouvés en inspectant sbt.bat . Un moyen simple de diagnostiquer, d’où proviennent les parameters, est de commenter cette ligne dans un fichier batch: @echo off .