Как указать максимальный размер кучи JVM " - Xmx "для запуска приложения с действием" run " в SBT?
мое приложение выполняет обработку больших массивов данных и требует больше памяти, чем JVM дает по умолчанию. Я знаю, что в Java это указано опцией "- Xmx". Как настроить SBT для использования определенного значения " - Xmx "для запуска приложения с действием" выполнить"?
11 ответов:
попробуйте это:
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) }) }
для раздвоенных процессов вы должны посмотреть на сборку.скала
чтобы изменить параметры java для разветвленных процессов, необходимо указать их в сборке.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, используя тот же синтаксис, что и в . Это делает проект самодостаточным.перед 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, что в конечном итоге приводит к перезапуску.
Если вы запускаете sbt на Linux shell, вы можете использовать:
env JAVA_OPTS="-Xmx512m" sbt run
Это моя обычно используемая команда для запуска моего проекта sbt.
.sbtconfig
является устаревшим, начиная с SBT0.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
есть один способ я знаю. Установите переменную окружения JAVA_OPTS.
JAVA_OPTS='-Xmx512m'
Я не нашел способ сделать это в качестве параметра.
используйте JAVA_OPTS для установки с переменной окружения.
используйте опции-J-X для sbt для отдельных опций, например -J-Xmx2048-J-XX: MaxPermSize=512
более новые версии sbt имеют опцию "- mem".
на
javaOptions += "-XX:MaxPermSize=1024"
в нашей сборке.sbt, на который ссылается @iwein выше, работал для нас, когда мы видели java.ленг.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
).
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