Moja aplikacja przetwarza duże tablice danych i potrzebuje więcej pamięci niż domyślnie zapewnia JVM. Wiem, że w Javie jest to określone opcją „-Xmx”. Jak ustawić SBT tak, aby używał określonej wartości „-Xmx”, aby uruchamiać aplikację z akcją „uruchom”?
98
javaOptions += "-Xmx1G"
javaOptions
mają one wpływ tylko na rozwidlone maszyny JVM (patrz scala-sbt.org/0.13/docs/Forking.html )fork in run := ture
włączajavaOptions
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:
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 wsbtconfig
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: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:
Spójrz na zawartość:
Ustaw odpowiednie opcje jvm, aby zapobiec OOM (zarówno zwykłemu, jak i PermGen):
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.
źródło
.sbtopts
plik w katalogu głównym swojego projektu SBT, używając tej samej składni, co w/usr/local/etc/sbtopts
pliku. Dzięki temu Twój projekt jest samowystarczalny, co może być bardzo przydatne w sytuacjach CI.W wersji SBT 12 i nowszych jest do tego opcja:
źródło
Not a valid command: mem (similar: set)
Jeśli uruchamiasz sbt w powłoce Linuksa, możesz użyć:
To jest moje zwykle używane polecenie do uruchomienia mojego projektu sbt.
źródło
override def fork
rozwiązania powyżej. (sbt 0.7.7).sbtconfig
jest przestarzały, począwszy od SBT0.13.6
. Zamiast tego skonfigurowałem te opcje w/usr/local/etc/sbtopts
następujący sposób:źródło
-J-Xss1M
jest nieco niska dla dużych klas przypadków, 4M wydaje się bezpieczniejsze.Znam jeden sposób. Ustaw zmienną środowiskową JAVA_OPTS.
Nie znalazłem sposobu, aby to zrobić jako parametr polecenia.
źródło
Użyj JAVA_OPTS do ustawienia ze zmienną środowiskową.
Użyj opcji -JX do sbt dla poszczególnych opcji, np. -J-Xmx2048 -J-XX: MaxPermSize = 512
Nowsze wersje sbt mają opcję „-mem”.
źródło
Plik
javaOptions += "-XX:MaxPermSize=1024"
w naszym build.sbt, do którego odwołuje się @iwein powyżej, zadziałał dla nas, gdy zobaczyliśmy błąd java.lang.OutOfMemoryError wyrzucony podczas uruchamiania testów Specs2 za pośrednictwem sbt.źródło
Zmienna środowiskowa to _JAVA_OPTIONS, którą należy ustawić. Po ustawieniu opcji _JAVA_OPTIONS, a gdy sbt, sbt wyświetli komunikat przy użyciu JAVA_OPTIONS i wartości.
Alternatywnie możesz ustawić javaOption w pliku sbt lub .scala np
Z powłoki SBT można uruchomić polecenie show javaOptions, aby zobaczyć ustawione wartości.
źródło
Spowoduje to ustawienie opcji JVM dla testów. Działa również z forkingiem jvm (
fork in Test := true
).źródło
build.sbt
?javaOptions in ThisBuild += "-Xmx1G"
lubjavaOptions in (ThisBuild, Test) += "-Xmx1G"
sbt umożliwia wyświetlenie opcji maszyny JVM potrzebnych do uruchomienia projektu w pliku o nazwie
.jvmopts
w katalogu głównym projektu. następnie dodaj żądane opcje Java
jest przetestowany i działa w systemie Windows 10 https://www.lagomframework.com/documentation/1.4.x/scala/JVMMemoryOnDev.html
źródło