W przypadku procesów rozwidlonych należy spojrzeć na Build.scala
Aby zmodyfikować opcje java dla procesów rozwidlonych, musisz określić je w Build.scala (lub jakkolwiek nazwałeś swoją kompilację) w następujący sposób:
val buildSettings = Defaults.defaultSettings ++ Seq(
//…
javaOptions += "-Xmx1G",
//…
)
To da ci odpowiednie opcje bez globalnej modyfikacji JAVA_OPTS i umieści niestandardowe JAVA_OPTS w wygenerowanym skrypcie startowym sbt
W przypadku procesów nierozdzielonych najwygodniej jest ustawić konfigurację za pośrednictwem sbtopts
lub w sbtconfig
zależności od wersji sbt.
Ponieważ sbt 0.13.6 .sbtconfig
jest przestarzały . Modyfikuj w /usr/local/etc/sbtopts
następujący sposób:
-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
Możesz także utworzyć .sbtopts
plik w katalogu głównym projektu SBT, używając tej samej składni, co w /usr/local/etc/sbtopts
pliku. Dzięki temu projekt jest samowystarczalny.
Przed sbt 0.13.6 można było ustawić opcje w .sbtconfig dla procesów nierozdzielonych :
Sprawdź, gdzie jest sbt:
$ which sbt
/usr/local/bin/sbt
Spójrz na zawartość:
$ 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 "$@"
Ustaw odpowiednie opcje jvm, aby zapobiec OOM (zarówno zwykłemu, jak i PermGen):
$ cat ~/.sbtconfig
SBT_OPTS="-Xms512M -Xmx3536M -Xss1M
-XX:+CMSClassUnloadingEnabled
-XX:+UseConcMarkSweepGC -XX:MaxPermSize=724M"
Jeśli chcesz ustawić SBT_OPTS tylko dla bieżącego uruchomienia sbt, możesz użyć env SBT_OPTS=".." sbt
zgodnie z sugestią Googol Shan. Można też użyć opcji dodanej w SBT 12: sbt -mem 2048
. Staje się to nieporęczne w przypadku dłuższych list opcji, ale może pomóc, jeśli masz różne projekty o różnych potrzebach.
Zwróć uwagę, że CMSClassUnloadingEnabled w połączeniu z UseConcMarkSweepGC pomaga utrzymać czystość przestrzeni PermGen, ale w zależności od używanych frameworków możesz mieć rzeczywisty wyciek na PermGen, który ostatecznie wymusza ponowne uruchomienie.
javaOptions += "-Xmx1G"