Відповіді:
Спробуйте це:
class ForkRun(info: ProjectInfo) extends DefaultProject(info) {
override def fork = Some(new ForkScalaRun {
override def runJVMOptions = super.runJVMOptions ++ Seq("-Xmx512m")
override def scalaJars = Seq(buildLibraryJar.asFile, buildCompilerJar.asFile)
})
}
javaOptions
це діє лише для роздвоєних СП (див. Scala-sbt.org/0.13/docs/Forking.html )
fork in run := ture
дозволяєjavaOptions
Для роздвоєних процесів слід переглянути Build.scala
Щоб змінити параметри Java для роздвоєних процесів, потрібно вказати їх у Build.scala (або тому, що ви назвали своєю збіркою) так:
val buildSettings = Defaults.defaultSettings ++ Seq(
//…
javaOptions += "-Xmx1G",
//…
)
Це дасть вам належні параметри, не змінюючи JAVA_OPTS у всьому світі, а також додасть власні JAVA_OPTS у стартовий сценарій, створений sbt
Для нерозгалужених процесів найзручніше встановлювати конфігурацію через вашу версію sbt sbtopts
або sbtconfig
залежно від неї.
Оскільки 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, що в підсумку змушує перезапустити.
.sbtopts
файл у кореневій частині вашого проекту SBT, використовуючи той самий синтаксис, що і у /usr/local/etc/sbtopts
файлі. Це робить ваш проект самодостатнім, що може бути дуже зручним у ситуаціях ІР.
У версії sbt від 12 далі є варіант для цього:
$sbt -mem 2048
Not a valid command: mem (similar: set)
Якщо ви запускаєте sbt на оболонці linux, ви можете використовувати:
env JAVA_OPTS="-Xmx512m" sbt run
Це моя зазвичай використовувана команда для запуску мого sbt-проекту.
override def fork
рішення вище. (sbt 0.7.7)
.sbtconfig
застаріло, починаючи з SBT 0.13.6
. Натомість я налаштував ці параметри /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
-J-Xss1M
дещо низький для великих класів кейсів, 4М здається безпечнішим.
У javaOptions += "-XX:MaxPermSize=1024"
нашому build.sbt, на який посилався @iwein вище, працювали для нас, коли ми бачили java.lang.OutOfMemoryError, кинутого під час запуску тестів Specs2 через sbt.
Змінна середовища _JAVA_OPTIONS, яку потрібно встановити. Як тільки ви встановите _JAVA_OPTIONS, і коли sbt, sbt відобразить повідомлення, використовуючи JAVA_OPTIONS та значення.
Крім того, ви можете встановити javaOption у файлі sbt або .scala, наприклад
javaOptions += "-Xmx1G"
З оболонки sbt ви можете запустити show javaOptions, щоб побачити встановлені значення.
javaOptions in Test += "-Xmx1G"
Це встановлює параметри JVM для тестів. Працює також з jvm forking ( fork in Test := true
).
build.sbt
?
javaOptions in ThisBuild += "-Xmx1G"
абоjavaOptions in (ThisBuild, Test) += "-Xmx1G"
sbt дозволяє перерахувати параметри JVM, необхідні для запуску проекту, у файлі з іменем
.jvmopts
в корені вашого проекту. потім додайте потрібні параметри Java
cat .jvmopts
-Xms512M
-Xmx4096M
-Xss2M
-XX:MaxMetaspaceSize=1024M
він протестований і працює в Windows 10 https://www.lagomframework.com/documentation/1.4.x/scala/JVMMemoryOnDev.html
javaOptions += "-Xmx1G"