Как установить размер кучи для sbt?
Я использую SBT 0.12.0. Я прочитал другие ответы на переполнение стека и последовал за ними, однако ни один из них не помогает, например:
- create
ForkRun
class - я не наблюдал никакого разветвленного процесса во время моего использования sbt
- установить переменную среды
JAVA_OPTS
- она установлена, но командная строка процесса sbt, похоже, вообще не использует ее.
-
sbt -J-Xmx2G
добавляет параметр в командную строку sbt process, однако старое значение -Xmx1536m
используется sbt вместо добавленного параметра.
Я что-то упустил? Как установить размер кучи для sbt 0.12 при выполнении обоих тестов и run
?
Ответы
Ответ 1
Я нашел решение. Независимо от того, как вы указываете размер кучи 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 answer.
Или, альтернативно:
sbt -J-Xmx4G -J-Xms4G
Ответ 2
Вам нужен 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
Ответ 3
По состоянию на март 2015 года, если вы используете sbt на OSX с Homebrew, тогда вы должны отредактировать файл /usr/local/etc/sbtopts
например.
# set memory options
#
#-mem <integer>
-mem 2048
Ответ 4
"sbt -mem 23000 run" работает для меня.
Ответ 5
В окнах для sbt 0.13.9.2 вам нужно установить JAVA_OPTS
в параметры jvm, которые вы хотите.
> set JAVA_OPTS=-Xmx1G
> sbt assembly
sbt.bat
script загружает значения по умолчанию из 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 %*
Ответ 6
Я искал решение такой проблемы на 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 "[email protected]"
Это означает, что все настройки, введенные в SBT_OPTS
, будут вставлены (ваш -Xmx будет иметь приоритет). Кроме того, первая строка script будет выполнять любые команды в ~/.sbtconfig
, если она существует, поэтому может быть лучше разместить ваши параметры SBT, если вы играете с ними совсем немного. Вам не придется source ~/.bash_profile
при каждом изменении SBT_OPTS
Ответ 7
Если вы запускаете sbt из PowerShell, установите переменную среды SBT_OPTs
, например:
$env:SBT_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M"
Затем запустите:
sbt
Ответ 8
Для версии SBT версии 1.0.4 в Windows настройки по умолчанию JVM относятся к файлу sbt\conf\sbtconfig.txt
. Просто измените значения здесь. Измените -Xmx512M
на -Xmx2048M
.
Это не единственный источник JVM-параметров для SBT. Другие можно найти, проверив sbt.bat
. Простой способ диагностики, откуда берутся настройки, заключается в комментировании этой строки в пакетном файле: @echo off
.
Ответ 9
Быстрый способ сделать это с помощью файла .jvmopts
в корне вашего проекта (из документации Lagom Framework):
$ cat .jvmopts
-Xms512M
-Xmx4096M
-Xss2M
-XX:MaxMetaspaceSize=1024M
Ответ 10
В моем случае конфигурация моего сервиса перезаписывала переменные окружения 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