11 votes

Sur un projet scala - Obtention de l'erreur GC overhead limit exceeded lors de l'exécution de la commande sbt test

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 ?

15voto

Anang Satria Points 556

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.

2voto

Mario Galic Points 3246

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.

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