Как указать максимальный размер кучи JVM " - Xmx "для запуска приложения с действием" run " в SBT?


мое приложение выполняет обработку больших массивов данных и требует больше памяти, чем JVM дает по умолчанию. Я знаю, что в Java это указано опцией "- Xmx". Как настроить SBT для использования определенного значения " - Xmx "для запуска приложения с действием" выполнить"?

11 87

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 для не раскошелились процессы:

  1. проверьте, где находится sbt:

    $ which sbt
    /usr/local/bin/sbt
    
  2. посмотрите на содержание:

    $ 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 "$@"
    
  3. установите правильные параметры 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 версии 12 и далее есть опция для этого:

$sbt -mem 2048 

Если вы запускаете sbt на Linux shell, вы можете использовать:

env JAVA_OPTS="-Xmx512m" sbt run

Это моя обычно используемая команда для запуска моего проекта sbt.

.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

есть один способ я знаю. Установите переменную окружения 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