Как установить размер кучи для 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