Для разветвленных процессов вы должны посмотреть на Build.scala
Чтобы изменить параметры java для разветвленных процессов, вам нужно указать их в Build.scala (или как вы назвали свою сборку) следующим образом:
val buildSettings = Defaults.defaultSettings ++ Seq(
//…
javaOptions += "-Xmx1G",
//…
)
Это даст вам правильные параметры без глобального изменения JAVA_OPTS, и , это поместит пользовательские JAVA_OPTS в sbt-сгенерированный старт-скрипт
Для не разветвленных процессов наиболее удобно устанавливать конфигурацию с помощью sbtopts
или sbtconfig
в зависимости от вашей версии sbt.
Поскольку sbt 0,13,6 .sbtconfig
устарело . Измените /usr/local/etc/sbtopts
в соответствии с этим:
-J-Xms512M
-J-Xmx3536M
-J-Xss1M
-J-XX:+CMSClassUnloadingEnabled
-J-XX:+UseConcMarkSweepGC
-J-XX:MaxPermSize=724M
-J-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005
Вы также можете создать файл .sbtopts
в корне вашего проекта SBT, используя тот же синтаксис, что и в файле /usr/local/etc/sbtopts
. Это делает проект автономным.
До sbt 0.13.6 вы можете установить параметры в .sbtconfig для не разветвленных процессов:
Проверьте, где находится sbt:
$ which sbt
/usr/local/bin/sbt
Посмотрите на содержание:
$ cat /usr/local/bin/sbt
#!/bin/sh
test -f ~/.sbtconfig && . ~/.sbtconfig
exec java ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.12.1/libexec/sbt-launch.jar "$@"
Установите правильные параметры jvm для предотвращения OOM (как обычного, так и PermGen):
$ cat ~/.sbtconfig
SBT_OPTS="-Xms512M -Xmx3536M -Xss1M
-XX:+CMSClassUnloadingEnabled
-XX:+UseConcMarkSweepGC -XX:MaxPermSize=724M"
Если вы хотите установить SBT_OPTS только для текущего запуска sbt, вы можете использовать env SBT_OPTS=".." sbt
в соответствии с рекомендациями Гугола Шаня. Или вы можете использовать опцию, добавленную в Sbt 12: sbt -mem 2048
. Это становится громоздким для длинных списков опций, но может помочь, если у вас есть разные проекты с разными потребностями.
Обратите внимание, что CMSClassUnloadingEnabled совместно с UseConcMarkSweepGC помогает поддерживать чистоту пространства PermGen, но в зависимости от того, какие платформы вы используете, вы можете столкнуться с фактической утечкой в PermGen, что в конечном итоге приведет к перезапуску.