¿Cómo especificar el tamaño máximo del montón de JVM " - Xmx "para ejecutar una aplicación con la acción" run " en SBT?


Mi aplicación procesa grandes matrices de datos y necesita más memoria de la que JVM proporciona por defecto. Sé que en Java está especificado por la opción "- Xmx". ¿Cómo configuro SBT para usar un valor particular " - Xmx "para ejecutar una aplicación con la acción" run"?

 87
Author: Ivan, 2010-10-06

11 answers

Prueba esto:

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)
    })
}
 15
Author: Arne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-06 19:41:16

Para los procesos bifurcados, debe buscar en Build.scala

Para modificar las opciones de java para procesos bifurcados, debe especificarlas en la compilación.scala (o como sea que hayas llamado tu build) así:

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

Esto le dará las opciones adecuadas sin modificar JAVA_OPTS globalmente, y pondrá JAVA_OPTS personalizados en un script de inicio generado por sbt

Para los procesos no bifurcados es más conveniente establecer config vía sbtopts o sbtconfig dependiendo de su versión sbt.

Desde sbt 0.13.6 .sbtconfig está en desuso. Modifíquese /usr/local/etc/sbtopts de la siguiente manera:

-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

También puede crear un archivo .sbtopts en la raíz de su proyecto SBT utilizando la misma sintaxis que en el archivo /usr/local/etc/sbtopts. Esto hace que el proyecto sea autónomo.

Antes de sbt 0.13.6 podría establecer las opciones en .sbtconfig para procesos no bifurcados :

  1. Compruebe dónde sbt is:

    $ which sbt
    /usr/local/bin/sbt
    
  2. Mira el contenido:

    $ 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. Establezca las opciones correctas de jvm para evitar OOM (tanto regular como PermGen):

    $ cat ~/.sbtconfig
    SBT_OPTS="-Xms512M -Xmx3536M -Xss1M 
     -XX:+CMSClassUnloadingEnabled 
     -XX:+UseConcMarkSweepGC -XX:MaxPermSize=724M"
    

Si desea establecer SBT_OPTS solo para la ejecución actual de sbt, puede usar env SBT_OPTS=".." sbt como sugiere Googol Shan. O puede utilizar la opción añadida en Sbt 12: sbt -mem 2048. Esto se vuelve difícil de manejar para listas más largas de opciones, pero podría ayudar si tiene diferentes proyectos con diferentes necesidades.

Tenga en cuenta que CMSClassUnloadingEnabled en concierto con UseConcMarkSweepGC ayuda a mantener limpio el espacio PermGen, pero dependiendo de los frameworks que utilice, podría tener una fuga real en PermGen, lo que eventualmente obliga a un reinicio.

 101
Author: iwein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-17 07:15:43

En sbt versión 12 en adelante hay una opción para esto:

$sbt -mem 2048 
 63
Author: scrapcodes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-31 15:45:01

Si ejecuta sbt en linux shell, puede usar:

env JAVA_OPTS="-Xmx512m" sbt run

Este es el comando que uso habitualmente para ejecutar mi proyecto sbt.

 40
Author: Googol Shan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-06 08:13:50

.sbtconfig está en desuso a partir de SBT 0.13.6. En su lugar, configuré estas opciones en /usr/local/etc/sbtopts de la siguiente manera:

-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
 18
Author: Piotr De,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-27 11:34:20

Hay una forma que conozco. Establece la variable de entorno JAVA_OPTS.

JAVA_OPTS='-Xmx512m'

No he encontrado una manera de hacer esto como un parámetro de comando.

 6
Author: Synesso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-06 02:20:52

Use JAVA_OPTS para configurar con variable de entorno.

Use-J-X options a sbt para opciones individuales, por ejemplo-J-Xmx2048-J-XX: MaxPermSize = 512

Las versiones más recientes de sbt tienen una opción "-mem".

 5
Author: Brett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-22 12:18:48

El javaOptions += "-XX:MaxPermSize=1024" en nuestra compilación.sbt como se hace referencia por @iwein anteriormente trabajó para nosotros cuando estábamos viendo un java.lang.OutOfMemoryError lanzado mientras se ejecutan pruebas Specs2 a través de sbt.

 4
Author: Pete Neisen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-12 15:55:36

La variable de entorno es _JAVA_OPTIONS, que necesita ser definida. Una vez que establezca _JAVA_OPTIONS, y cuando sbt, sbt mostrará el mensaje usando JAVA_OPTIONS y los valores.

Alternativamente puede establecer javaOption en el sbt or.archivo scala por ejemplo,

javaOptions += "-Xmx1G"

Desde sbt shell puedes ejecutar show javaOptions para ver los valores que se establecen.

 3
Author: Sajive Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-15 13:28:23
    javaOptions in Test += "-Xmx1G"

Esto establece las opciones de JVM para las pruebas. Funciona también con bifurcación jvm (fork in Test := true).

 1
Author: VasyaNovikov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-10 10:32:10

Sbt le permite enumerar las opciones de JVM que necesita para ejecutar su proyecto en un archivo llamado

.jvmopts

En la raíz de tu proyecto. a continuación, agregue las opciones de Java que desee

cat .jvmopts
-Xms512M
-Xmx4096M
-Xss2M
-XX:MaxMetaspaceSize=1024M

Se prueba y funciona en Windows 10 https://www.lagomframework.com/documentation/1.4.x/scala/JVMMemoryOnDev.html

 1
Author: Ar maj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-28 01:09:05