Как установить размер кучи для SBT?
Я использую SBT 0.12.0. Я прочитал другие ответы о переполнении стека и следовал за ними, однако ни один из них не помогает, например:
- Создайте
ForkRun
класс - я не наблюдал никакого разветвленного процесса во время моего использования sbt - установить переменную среды
JAVA_OPTS
- он установлен, но командная строка процесса sbt, похоже, не использует его вообще. sbt -J-Xmx2G
добавляет параметр в командную строку процесса sbt, однако старое значение-Xmx1536m
используется sbt вместо добавленного параметра.
Я что-то пропустил? Как установить размер кучи для sbt 0.12, когда выполняете тестирование и run
?
12 ответов
Я нашел решение. Независимо от того, как вы указываете размер кучи 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
Тебе нужно 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
По состоянию на март 2015 года, если вы используете sbt в OSX вместе с Homebrew, вам следует отредактировать файл /usr/local/etc/sbtopts
например
# set memory options
#
#-mem <integer>
-mem 2048
Быстрый способ сделать это с .jvmopts
файл в корне вашего проекта (из документации Lagom Framework):
$ cat .jvmopts
-Xms512M
-Xmx4096M
-Xss2M
-XX:MaxMetaspaceSize=1024M
На 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
Если вы запускаете 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
в -Xmx2048M
,
Это не единственный источник параметров JVM для SBT. Другие могут быть найдены путем проверки sbt.bat
, Простой способ выяснить, откуда берутся настройки, - закомментировать эту строку в командном файле: @echo off
,
В моем случае конфигурация моей службы перезаписывала переменную среды 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
На окнах работает
SET SBT_OPTS="-XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xmx2G -Xms1G"
до
sbt
кажется, это то, что решило это для меня.
Ссылка: https://www.baeldung.com/scala/sbt-heap-size
я только что изменил
export
к
SET
.
Если вы используете Windows, вы можете легко установить переменные среды:
После этого не забудьте перезапустить консоль терминала (CMD, Powershell,...) для обновления.
Это работает для меня!