Я использую SBT 0.12.0. Я читал другие ответы о переполнении стека и следил за ними, однако ни один из них не помогает, например:
- create
ForkRun
class - я не наблюдал никаких разветвленных процессов во время использования sbt - установить переменную среды
JAVA_OPTS
- она установлена, но командная строка процесса sbt, похоже, ее вообще не использует. sbt -J-Xmx2G
добавляет параметр в командную строку процесса sbt, однако старое значение-Xmx1536m
используется sbt вместо добавленного параметра.
Я что-то упускаю? Как установить размер кучи для sbt 0,12 при выполнении как тестирования, так и run
?
mem
параметр при запуске sbt? (egsbt -mem2000
)Ответы:
Вам нужно
SBT_OPTS
, вот что я использую в своем .bash_profile :export SBT_OPTS="-Xmx1536M -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M -Duser.timezone=GMT"
ОБНОВЛЕНИЕ: чтобы получить пространство кучи 2G, вы можете использовать это:
export SBT_OPTS="-Xmx2G -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M -Duser.timezone=GMT"
ПРИМЕЧАНИЕ: SBT ДОЛЖЕН БЫТЬ ПОСЛЕДНЕЙ ВЕРСИИ
Более старые версии
sbt
содержат ошибки, которые отменяют эти настройки, используйтеbrew upgrade sbt
последнюю версиюsbt
для Mac (при условии установки brew) (IDK для Linux). https://github.com/sbt/sbt/issues/2945#issuecomment-277490848источник
-Xmx1546m
все еще существует в командной строке, и максимальный размер кучи по-прежнему ограничен 1,5 ГБ, как показано в visualvm.Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=4G; support was removed in 8.0
По состоянию на март 2015 года, если вы используете sbt на OSX с Homebrew, вам следует отредактировать файл
/usr/local/etc/sbtopts
например
# set memory options # #-mem <integer> -mem 2048
источник
/etc/sbt-launcher-packaging
./etc/sbt/sbtopts
SBT_OPTS=-Xmx2G sbt
для запуска SBT, он будет увеличивать кучу по мере необходимости до максимум 2 ГБ."sbt -mem 23000 run" у меня работает.
источник
Я нашел решение. Независимо от того, как вы укажете размер кучи JVM, он никогда не будет работать, потому что исполняемый файл SBT уже переопределил его.
В исполняемом файле SBT есть строка, в которой говорится:
. /usr/share/sbt/sbt-launch-lib.bash
Итак, я отредактировал файл:
# 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[@]}"
Удалить
-
линию.Теперь, когда вы запустите SBT, он больше не будет переопределять ваши настройки размера кучи JVM. Вы можете указать настройки размера кучи, используя ответ @Noan.
Или альтернативно:
sbt -J-Xmx4G -J-Xms4G
источник
export SBT_OPTS="..."
в~/.sbtconfig
действительно работает на самом деле.В Windows для sbt 0.13.9.2 вам нужно установить
JAVA_OPTS
нужные параметры jvm.> set JAVA_OPTS=-Xmx1G > sbt assembly
sbt.bat
Скрипт загружает его по умолчанию изconf\sbtconfig.txt
в ,CFG_OPTS
но будет использоватьJAVA_OPTS
вместо этого , если множество.Соответствующие выдержки из
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! )
. . . (пропускать) . . .
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 %*
источник
Я искал решение такой проблемы в Mac OS X с помощью самодельной установки SBT. Если вы установили SBT через homebrew, вы ничего не понимаете, поскольку
/usr/local/bin/sbt
файл выглядит как#!/bin/sh test -f ~/.sbtconfig && . ~/.sbtconfig exec java -Xmx512M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.12.3/libexec/sbt-launch.jar "$@"
Это означает, что любые введенные вами настройки
SBT_OPTS
сохранятся (ваш -Xmx будет иметь приоритет). Кроме того, первая строка скрипта будет выполнять любые команды,~/.sbtconfig
если они существуют, поэтому это может быть лучшим местом для размещения ваших параметров SBT, если вы немного поиграетесь с ними. Вам не придетсяsource ~/.bash_profile
каждый раз вносить изменения вSBT_OPTS
источник
-mem
параметра в/usr/local/etc/sbtopts
Если вы запускаете sbt из PowerShell, установите
SBT_OPTs
переменную среды, например:$env:SBT_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M"
Затем запустите:
источник
Для SBT версии 1.0.4 в Windows настройки JVM по умолчанию берутся из
sbt\conf\sbtconfig.txt
файла. Просто отредактируйте значения здесь. Измените-Xmx512M
на-Xmx2048M
.Это не единственный источник опций JVM для SBT. Остальные можно найти, осмотрев
sbt.bat
. Простой способ диагностики, где делать настройки берутся, это, комментируя эту строку в пакетном файле:@echo off
.источник
sbt\conf
помещается не в каталог пользователя, а в папку Program Files, напримерC:\Program Files (x86)\sbt\conf
.Быстрый способ сделать это - использовать
.jvmopts
файл в корне вашего проекта (из документации Lagom Framework ):$ cat .jvmopts -Xms512M -Xmx4096M -Xss2M -XX:MaxMetaspaceSize=1024M
источник
В моем случае конфигурация моей службы перезаписывала переменную среды
SBT_OPTS
иJAVA_OPTS
. Я смог установить ограничения, установивbuild.sbt
следующее:javaOptions in Universal ++= Seq( "-J-Xms1g", "-J-Xmx2g")
Ссылка: https://www.scala-sbt.org/sbt-native-packager/archetypes/java_app/customize.html
источник