Как установить размер кучи для sbt?


я использую SBT 0.12.0. Я читал другие ответы на переполнение стека и следовал им, однако ни один из них не помогает, например:

  • создать ForkRun класс-я не наблюдал никакого раздвоенного процесса во время моего использования sbt
  • установить переменную среды JAVA_OPTS - он установлен, но командная строка процесса sbt, похоже, не использует его вообще.
  • sbt -J-Xmx2G добавляет параметр в командную строку процесса sbt, однако старое значение -Xmx1536m используется sbt вместо прилагаемого параметра.

Я что-то пропустила? Как установить размер кучи для sbt 0.12, при выполнении как тестирования, так и run?

8 71

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

"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

на 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.