Je suis nouveau dans la programmation en scala et j'obtiens GC overhead limit exceeded
erreur lorsque j'exécute sbt test
dans l'un des grands projets Scala. Quelqu'un sait-il comment résoudre ce problème ?
Réponses
Trop de publicités?J'ai reçu l'aide de mes amis :)
Augmentez l'option mémoire en exécutant avec l'option -mem par exemple :
sbt -mem 2048 test
Autres options :
Pour les utilisateurs de Mac et de Linux :
si nous devons l'exécuter souvent. Nous pouvons mettre à jour le .bash_profile
et ajoutez la commande ci-dessous :
export SBT_OPTS="-Xmx2G"
Autre solution (fonctionne aussi avec Windows) :
Il y a aussi un sbtopts
où vous pouvez conserver ce paramètre de mémoire :
Trouver un fichier sous Mac/Linux : /usr/local/etc/sbtopts
Ou dans Windows C:\Program Files (x86)\sbt\conf
et ajoutez la configuration ci-dessous :
# set memory options
#
-mem 2048
J'espère que tous ces conseils aideront quelqu'un à résoudre ce problème.
En regardant le Lanceur script pour exécuter sbt qui, sur mon système, se trouve à /usr/share/sbt/bin/sbt
nous voyons ce qui suit :
declare -r sbt_opts_file=".sbtopts"
declare -r etc_sbt_opts_file="/etc/sbt/sbtopts"
declare -r dist_sbt_opts_file="${sbt_home}/conf/sbtopts"
...
# Here we pull in the default settings configuration.
[[ -f "$dist_sbt_opts_file" ]] && set -- $(loadConfigFile "$dist_sbt_opts_file") "$@"
# Here we pull in the global settings configuration.
[[ -f "$etc_sbt_opts_file" ]] && set -- $(loadConfigFile "$etc_sbt_opts_file") "$@"
# Pull in the project-level config file, if it exists.
[[ -f "$sbt_opts_file" ]] && set -- $(loadConfigFile "$sbt_opts_file") "$@"
# Pull in the project-level java config, if it exists.
[[ -f ".jvmopts" ]] && export JAVA_OPTS="$JAVA_OPTS $(loadConfigFile .jvmopts)"
run "$@"
Nous pouvons donc y mettre des paramètres de configuration :
.jvmopts
.sbtopts
/etc/sbt/sbtopts
${sbt_home}/conf/sbtopts
Par exemple, typelevel/cats
utilisations du projet .jvmopts
pour fixer -Xmx3G
. On pourrait aussi faire
echo "-mem 2048" >> .sbtopts
Concernant les variables environnementales sbt -h
les documents qui
JAVA_OPTS environment variable, if unset uses "$java_opts"
.jvmopts if this file exists in the current directory, its contents
are appended to JAVA_OPTS
SBT_OPTS environment variable, if unset uses "$default_sbt_opts"
.sbtopts if this file exists in the current directory, its contents
are prepended to the runner args
Par exemple,
export JAVA_OPTS=-Xmx2G
sbt
devrait faire fonctionner sbt avec 2G de mémoire.
Notez que si vous exécutez des tests dans JVM bifurquée vous pouvez alors augmenter la mémoire via javaOptions
à l'intérieur build.sbt
comme ça :
Test / fork := true
Test / javaOptions ++= Seq("-Xmx4G")
VisualVM est un outil utile pour voir quels paramètres ont été transmis à un processus JVM lors de l'expérimentation de différentes manières de configurer SBT.