Для разветвленных процессов вы должны посмотреть Build.scala
Чтобы изменить параметры java для разветвленных процессов, вам необходимо указать их в Build.scala (или как там вы назвали свою сборку) следующим образом:
val buildSettings = Defaults.defaultSettings ++ Seq(
//…
javaOptions += "-Xmx1G",
//…
)
Это даст вам правильные параметры без глобального изменения JAVA_OPTS, и он поместит пользовательский JAVA_OPTS в сгенерированный sbt start-script
Для не разветвленных процессов удобнее всего настроить конфигурацию через 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
как это предлагает Googol Shan. Или вы можете использовать опцию, добавленную в Sbt 12 : sbt -mem 2048
. Это становится громоздким для более длинных списков вариантов, но может помочь, если у вас есть разные проекты с разными потребностями.
Обратите внимание, что CMSClassUnloadingEnabled совместно с UseConcMarkSweepGC помогает поддерживать чистоту пространства PermGen, но в зависимости от того, какие фреймворки вы используете, у вас может быть фактическая утечка PermGen, что в конечном итоге приведет к перезагрузке.
javaOptions += "-Xmx1G"