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

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

Ответы [ 11 ]

106 голосов
/ 28 января 2013

Для разветвленных процессов вы должны посмотреть на Build.scala

Чтобы изменить параметры java для разветвленных процессов, вам нужно указать их в Build.scala (или как вы назвали свою сборку) следующим образом:

val buildSettings = Defaults.defaultSettings ++ Seq(
   //…
   javaOptions += "-Xmx1G",
   //…
)

Это даст вам правильные параметры без глобального изменения JAVA_OPTS, и , это поместит пользовательские JAVA_OPTS в sbt-сгенерированный старт-скрипт

Для не разветвленных процессов наиболее удобно устанавливать конфигурацию с помощью 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 для не разветвленных процессов:

  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 в соответствии с рекомендациями Гугола Шаня. Или вы можете использовать опцию, добавленную в Sbt 12: sbt -mem 2048. Это становится громоздким для длинных списков опций, но может помочь, если у вас есть разные проекты с разными потребностями.

Обратите внимание, что CMSClassUnloadingEnabled совместно с UseConcMarkSweepGC помогает поддерживать чистоту пространства PermGen, но в зависимости от того, какие платформы вы используете, вы можете столкнуться с фактической утечкой в ​​PermGen, что в конечном итоге приведет к перезапуску.

65 голосов
/ 31 мая 2013

В sbt версии 12 и выше есть опция для этого:

$sbt -mem 2048 
41 голосов
/ 06 октября 2010

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

env JAVA_OPTS="-Xmx512m" sbt run

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

21 голосов
/ 27 октября 2014

.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
15 голосов
/ 29 октября 2010

Попробуйте это:

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)
    })
}
7 голосов
/ 22 мая 2014

Используйте JAVA_OPTS для установки с переменной среды.

Используйте опции -J-X для отдельных опций, например -J-Xmx2048 -J-XX: MaxPermSize = 512

Более новые версии sbt имеют опцию "-mem".

6 голосов
/ 06 октября 2010

Есть один способ, которым я знаю. Установите переменную среды JAVA_OPTS.

JAVA_OPTS='-Xmx512m'

Я не нашел способа сделать это в качестве параметра команды.

4 голосов
/ 12 февраля 2014

javaOptions += "-XX:MaxPermSize=1024" в нашем build.sbt, на который ссылается @iwein выше, сработал для нас, когда мы увидели java.lang.OutOfMemoryError, выдаваемую при выполнении тестов Specs2 через sbt.

3 голосов
/ 15 августа 2015

Переменная окружения - _JAVA_OPTIONS, которую необходимо установить.После того, как вы установите _JAVA_OPTIONS и sbt, sbt покажет сообщение, используя JAVA_OPTIONS и значения.

В качестве альтернативы вы можете установить javaOption в файле sbt или .scala, например,

javaOptions += "-Xmx1G"

ИзОболочка sbt вы можете запустить show javaOptions, чтобы увидеть установленные значения.

1 голос
/ 28 мая 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...