J'utilise SBT 0.12.0. J'ai lu d'autres réponses sur le dépassement de capacité de la pile et je les ai suivies, mais aucune d'entre elles n'aide, par exemple:
ForkRun
class - je n'ai pas observé de processus forké lors de mon utilisation de sbtJava_OPTS
_ il est défini, mais la ligne de commande de processus de sbt ne semble pas du tout l’utiliser.sbt -J-Xmx2G
ajoute le paramètre à la ligne de commande du processus sbt, mais l'ancienne valeur -Xmx1536m
est utilisé 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, lors des tests et de run
?
J'ai trouvé la solution. Quelle que soit la manière dont vous spécifiez la taille de segment de mémoire JVM, cela ne fonctionnera jamais car l'exécutable SBT le remplace déjà.
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.
Désormais, lorsque vous exécutez SBT, vos paramètres de taille de segment de mémoire JVM ne seront plus remplacés. Vous pouvez spécifier les paramètres de taille de tas en utilisant la réponse de @ Noan.
Ou bien:
sbt -J-Xmx4G -J-Xms4G
Vous avez besoin 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 votre espace de mémoire 2G, vous pouvez utiliser ceci:
export SBT_OPTS="-Xmx2G -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M -Duser.timezone=GMT"
REMARQUE: SBT DOIT ÊTRE DERNIÈRE VERSION
Les anciennes versions de sbt
contiennent des bogues qui remplacent ces paramètres, utilisez brew upgrade sbt
pour la dernière sbt
pour Mac (en supposant que l’installation est prévue) (IDK pour Linux). https://github.com/sbt/sbt/issues/2945#issuecomment-277490848
Depuis 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 <integer>
-mem 2048
"sbt -mem 23000 run" fonctionne pour moi.
Sous Windows, pour sbt 0.13.9.2, vous devez définir Java_OPTS
aux options JVM que vous voulez.
> set Java_OPTS=-Xmx1G
> sbt Assembly
Le sbt.bat
Le script charge ses valeurs par défaut de conf\sbtconfig.txt
en CFG_OPTS
mais utilisera Java_OPTS
à la place si 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 de ce type sous Mac OS X avec une installation homebrew de SBT. Si vous avez installé SBT via homebrew, vous êtes en clair depuis le /usr/local/bin/sbt
fichier 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 paramètres que vous avez mis dans SBT_OPTS
collera (votre -Xmx aura la priorité). De plus, la première ligne du script exécutera toutes les commandes de ~/.sbtconfig
si elle existe, il peut être préférable d’utiliser vos options SBT si vous les jouez un peu. Vous n'aurez pas à source ~/.bash_profile
chaque fois que vous apportez une modification à SBT_OPTS
Si vous utilisez sbt à partir de PowerShell, définissez le paramètre SBT_OPTs
variable d’environnement, comme ceci:
$env:SBT_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M"
Puis lancez:
sbt
Pour SBT version 1.0.4 sous Windows la valeur par défaut les paramètres JVM proviennent de sbt\conf\sbtconfig.txt
fichier. Modifiez simplement les valeurs ici. Changement -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 l’origine des paramètres consiste à commenter cette ligne dans un fichier de commandes: @echo off
.
Un moyen rapide de le faire est avec un .jvmopts
fichier à la racine de votre projet (à partir du documentation Lagom Framework ):
$ cat .jvmopts
-Xms512M
-Xmx4096M
-Xss2M
-XX:MaxMetaspaceSize=1024M
Dans mon cas, la configuration de mon service remplaçait la variable d’environnement SBT_OPTS
et Java_OPTS
. J'ai pu définir les limites en définissant dans mon build.sbt
le suivant:
javaOptions in Universal ++= Seq(
"-J-Xms1g",
"-J-Xmx2g")
Référence: https://www.scala-sbt.org/sbt-native-packager/archetypes/Java_app/customize.html