Как установить размер кучи для sbt?
я использую SBT 0.12.0. Я читал другие ответы на переполнение стека и следовал им, однако ни один из них не помогает, например:
- создать
ForkRun
класс-я не наблюдал никакого раздвоенного процесса во время моего использования sbt - установить переменную среды
JAVA_OPTS
- он установлен, но командная строка процесса sbt, похоже, не использует его вообще. -
sbt -J-Xmx2G
добавляет параметр в командную строку процесса sbt, однако старое значение-Xmx1536m
используется sbt вместо прилагаемого параметра.
Я что-то пропустила? Как установить размер кучи для sbt 0.12, при выполнении как тестирования, так и run
?
8 ответов:
вам нужно
SBT_OPTS
, вот что я использую в моей .файл: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
по состоянию на март 2015 года, если вы используете sbt на OSX С доморощенного затем вы должны отредактировать файл
/usr/local/etc/sbtopts
например
# set memory options # #-mem <integer> -mem 2048
Я нашел решение. Независимо от того, как вы укажете размер кучи 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
на windows, для sbt 0.13.9.2, вам нужно установить
JAVA_OPTS
к параметрам jvm, которые вы хотите.> set JAVA_OPTS=-Xmx1G > sbt assembly
The
sbt.bat
скрипт загружает свои значения по умолчанию изconf\sbtconfig.txt
наCFG_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, вы находитесь в чистом виде с
при запуске sbt из PowerShell установите
SBT_OPTs
переменная окружения, например:выполнить:$env:SBT_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M"
sbt
для SBT версии 1.0.4 на Windows по умолчанию настройки JVM исходят от
sbt\conf\sbtconfig.txt
. Просто отредактируйте значения здесь. Изменить-Xmx512M
to-Xmx2048M
.Это не единственный источник параметров JVM для SBT. Другие могут быть найдены путем проверки
sbt.bat
. Простой способ диагностировать, откуда берутся настройки, - это закомментировать эту строку в пакетном файле:@echo off
.