J'utilise SBT 0.12.0. J'ai lu d'autres réponses sur le débordement de pile et je les ai suivies, mais aucune d'entre elles n'aide, par exemple:
- create
ForkRun
class - Je n'ai observé aucun processus forké 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 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é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, lorsque je teste et run
?
mem
paramètre lorsque vous démarrez sbt? (par exemplesbt -mem2000
)Réponses:
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"
MISE À JOUR: Pour obtenir votre espace de tas 2G, vous pouvez utiliser ceci:
export SBT_OPTS="-Xmx2G -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M -Duser.timezone=GMT"
REMARQUE: SBT DOIT ÊTRE LA DERNIÈRE VERSION
Les anciennes versions de
sbt
contiennent des bogues qui remplacent ces paramètres, utilisezbrew upgrade sbt
pour la dernière versionsbt
pour Mac (en supposant l'installation de brew) (IDK pour Linux). https://github.com/sbt/sbt/issues/2945#issuecomment-277490848la source
-Xmx1546m
existe toujours dans la ligne de commande et la taille maximale du tas est toujours plafonnée à 1,5 Go, comme indiqué dans visualvm.Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=4G; support was removed in 8.0
À partir de mars 2015, si vous utilisez sbt sur OSX avec Homebrew, vous devez modifier le fichier
/usr/local/etc/sbtopts
par exemple
# set memory options # #-mem <integer> -mem 2048
la source
/etc/sbt-launcher-packaging
./etc/sbt/sbtopts
SBT_OPTS=-Xmx2G sbt
pour démarrer SBT, il augmentera le tas selon les besoins jusqu'à un maximum de 2 Go."sbt -mem 23000 run" fonctionne pour moi.
la source
J'ai trouvé la solution. Quelle que soit la façon dont vous spécifiez la taille du tas JVM, cela ne fonctionnera jamais car l'exécutable SBT l'a déjà remplacé.
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[@]}"
Retirez la
-
ligne.Désormais, lorsque vous exécutez SBT, il ne remplacera plus vos paramètres de taille de tas JVM. 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
la source
export SBT_OPTS="..."
dans~/.sbtconfig
fonctionne effectivement.Sous Windows, pour sbt 0.13.9.2, vous devez définir
JAVA_OPTS
les options jvm souhaitées.> set JAVA_OPTS=-Xmx1G > sbt assembly
Le
sbt.bat
script charge ses valeurs par défaut deconf\sbtconfig.txt
intoCFG_OPTS
mais l'utilisera à laJAVA_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 %*
la source
Je cherchais à résoudre un problème comme celui-ci sur Mac OS X avec une installation homebrew de SBT. Si vous avez installé SBT via homebrew, vous êtes en clair puisque 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
SBT_OPTS
resteront fidèles (votre -Xmx aura la priorité). De plus, la première ligne du script exécutera toutes les commandes~/.sbtconfig
s'il existe, donc ce peut être un meilleur endroit pour mettre vos options SBT si vous jouez un peu avec elles. Vous n'aurez pas à le fairesource ~/.bash_profile
chaque fois que vous modifiezSBT_OPTS
la source
-mem
paramètre in/usr/local/etc/sbtopts
Si vous exécutez sbt à partir de PowerShell, définissez la
SBT_OPTs
variable d'environnement, comme ceci:$env:SBT_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M"
Puis exécutez:
la source
Pour SBT version 1.0.4 sous Windows, les paramètres JVM
sbt\conf\sbtconfig.txt
par défaut proviennent du fichier. Modifiez simplement les valeurs ici. Changer-Xmx512M
en-Xmx2048M
.Ce n'est pas la seule source d'options JVM pour SBT. D'autres peuvent être trouvés en inspectant
sbt.bat
. Une façon simple de diagnostiquer, où faire les réglages viennent, est en commentant cette ligne dans le fichier batch:@echo off
.la source
sbt\conf
n'est pas placé dans le répertoire utilisateur, mais dans le dossier Program Files, commeC:\Program Files (x86)\sbt\conf
.Un moyen rapide de le faire est avec un
.jvmopts
fichier à la racine de votre projet (à partir de la documentation de Lagom Framework ):$ cat .jvmopts -Xms512M -Xmx4096M -Xss2M -XX:MaxMetaspaceSize=1024M
la source
Dans mon cas, la configuration de mon service écrasait la variable d'environnement
SBT_OPTS
etJAVA_OPTS
. J'ai pu définir les limites en définissant dans mes élémentsbuild.sbt
suivants:javaOptions in Universal ++= Seq( "-J-Xms1g", "-J-Xmx2g")
Référence: https://www.scala-sbt.org/sbt-native-packager/archetypes/java_app/customize.html
la source