Мое приложение обрабатывает большие массивы данных и требует большего объема памяти, чем по умолчанию JVM. Я знаю, что в Java указан параметр "-Xmx". Как настроить SBT для использования определенного значения "-Xmx" для запуска приложения с действием "запустить"?
Как указать максимальный размер кучи JVM "-Xmx" для запуска приложения с действием "запустить" в SBT?
Ответ 1
Попробуйте следующее:
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)
})
}
Ответ 2
Для разветвленных процессов вы должны посмотреть Build.scala
Чтобы изменить параметры java для разветвленных процессов, вам нужно указать их в Build.scala(или как бы вы назвали вашу сборку) следующим образом:
val buildSettings = Defaults.defaultSettings ++ Seq(
//…
javaOptions += "-Xmx1G",
//…
)
Это даст вам правильные варианты без изменения JAVA_OPTS по всему миру, и он добавит пользовательские JAVA_OPTS в sbt сгенерированный start- script
Для non forked процессов наиболее удобно устанавливать конфигурацию через 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 "[email protected]"
-
Задайте правильные параметры 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, что в конечном итоге приведет к перезапуску.
Ответ 3
В sbt версии 12 и далее есть опция для этого:
$sbt -mem 2048
Ответ 4
Если вы запустите sbt на оболочке linux, вы можете использовать:
env JAVA_OPTS="-Xmx512m" sbt run
Это моя обычно используемая команда для запуска моего проекта sbt.
Ответ 5
.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
Ответ 6
Там один из способов, о котором я знаю. Установите переменную среды JAVA_OPTS.
JAVA_OPTS='-Xmx512m'
Я не нашел способ сделать это как параметр команды.
Ответ 7
Используйте JAVA_OPTS для установки с переменной окружения.
Используйте опции -J-X для sbt для отдельных параметров, например. -J-Xmx2048 -J-XX: MaxPermSize = 512
В новых версиях sbt есть опция "-mem".
Ответ 8
javaOptions += "-XX:MaxPermSize=1024"
в нашем файле build.sbt, на который ссылается @iwein выше, работал для нас, когда мы видели java.lang.OutOfMemoryError, брошенную при запуске тестов Specs2 через sbt.
Ответ 9
Переменная среды - _JAVA_OPTIONS, которая должна быть установлена. После того, как вы установили _JAVA_OPTIONS, а когда вы sbt, sbt покажет сообщение с помощью JAVA_OPTIONS и значений.
В качестве альтернативы вы можете установить javaOption в файле sbt или .scala например,
javaOptions += "-Xmx1G"
Из оболочки sbt вы можете запустить show javaOptions, чтобы увидеть значения, которые установлены.
Ответ 10
javaOptions in Test += "-Xmx1G"
Здесь задаются параметры JVM для тестов. Работает также с jvm forking (fork in Test := true
).