Как установить размер кучи для sbt?
Я использую SBT 0.12.0. Я прочитал другие ответы на переполнение стека и последовал за ними, однако ни один из них не помогает, например:
- создайте class
ForkRun
– я не наблюдал никакого разветвленного процесса во время моего использования sbt - установить переменную среды
JAVA_OPTS
– она установлена, но командная строка процесса sbt, похоже, вообще не использует ее. -
sbt -J-Xmx2G
добавляет параметр в командную строку sbt process, однако старое значение-Xmx1536m
используется sbt вместо добавленного параметра.
Я что-то упускаю? Как установить размер кучи для sbt 0.12 при выполнении и тестирования и run
?
- Как загрузить локальный файл в sc.textFile вместо HDFS
- Как подавить информацию и сообщения о успехе в sbt?
- Как изменить параметры конструктора scala по умолчанию на private val?
- Получить измененный контент HTML после его обновления Javascript? (HtmlUnit)
- (Почему) нам нужно вызвать кеш или сохранить на RDD
- Метод writeframe Spark для записи многих небольших файлов
- Stackoverflow из-за длительной RDD Lineage
- Какова цель присвоения типов в Scala?
- Как написать правильный нуль-безопасный коалесцирующий оператор в scala?
- Подписать CSR с помощью Bouncy Castle
- Запись на несколько выходов с помощью ключа Spark - одно искровое задание
- Конструктор перегрузки для classов Case Scala?
- Ошибка с varargs для объектов-функций в Scala?
Вам нужен 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
для brew upgrade sbt
для последних sbt
для Mac (при условии установки на sbt
) (IDK для Linux). https://github.com/sbt/sbt/issues/2945#issuecomment-277490848
По состоянию на март 2015 года, если вы используете sbt на OSX с Homebrew, вам следует отредактировать файл /usr/local/etc/sbtopts
например
# set memory options # #-mem -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
в 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 через доморощенный, вы находитесь в ясном виде, так как файл /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 будет иметь приоритет). Кроме того, первая строка скрипта будет выполнять любые команды в ~/.sbtconfig
если она существует, поэтому может быть лучше разместить ваши параметры SBT, если вы играете с ними совсем немного. Вам не придется SBT_OPTS
source ~/.bash_profile
каждый раз, когда вы вносите изменения в SBT_OPTS
Если вы запускаете sbt из PowerShell, установите SBT_OPTs
среды 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
.