В проекте Scala - Ошибка при превышении предельного значения GC при выполнении команды sbt test - PullRequest
0 голосов
/ 14 февраля 2019

Я новичок в программировании Scala и получаю ошибку GC overhead limit exceeded при выполнении команды sbt test в одном из больших проектов Scala.Кто-нибудь знает, как я могу решить это?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Взглянув на скрипт запуска для запуска sbt , который в моей системе находится в /usr/share/sbt/bin/sbt, мы видим следующее:

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 "$@"

Таким образом, мы можем поместить параметры конфигурацииin:

.jvmopts
.sbtopts
/etc/sbt/sbtopts
${sbt_home}/conf/sbtopts

Например, typelevel/cats проект использует .jvmopts для установки -Xmx3G.В качестве альтернативы мы могли бы сделать

echo "-mem 2048" >> .sbtopts

Относительно переменных среды sbt -h документы, которые

  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

Например,

export JAVA_OPTS=-Xmx2G
sbt

должны запускать sbt с 2 ГБ памяти.

Обратите внимание, что если вы запускаете тесты в разветвленной JVM , то вы можете увеличить память с помощью параметра javaOptions в build.sbt следующим образом:

Test / fork := true
Test / javaOptions ++= Seq("-Xmx4G")

VisualVM - полезный инструмент, позволяющий увидеть, какие настройки были переданы процессу JVM при экспериментировании с различными способами настройки SBT.

0 голосов
/ 14 февраля 2019

Я получил помощь от моих друзей:)

Увеличьте параметр памяти, выполнив опцию -mem, например:

sbt -mem 2048 test

Другие параметры:

Для пользователей Mac и Linux:

, если нам нужно много выполнять это.Мы можем обновить файл .bash_profile и добавить следующую команду:

export SBT_OPTS="-Xmx2G"

Другое решение (также работает с Windows):

Также есть специальный файл sbtopts, в котором вы можете сохранить этот параметр памяти:

Найдите файл в Mac / Linux: /usr/local/etc/sbtopts Или в Windows C:\Program Files (x86)\sbt\conf

и добавьте следующую конфигурацию:

# set memory options
#
-mem   2048

Надеемся, что любой из этих советов поможет кому-то решить эту проблему.

...