Cómo especificar el tamaño máximo de almacenamiento dinámico de JVM “-Xmx” para ejecutar una aplicación con la acción “Ejecutar” en SBT?

StackOverflow https://stackoverflow.com/questions/3868863

  •  28-09-2019
  •  | 
  •  

Pregunta

Mi aplicación realiza el procesamiento de grandes conjuntos de datos y necesita más memoria de la JVM da por defecto. Sé que en Java se especifica mediante la opción "-Xmx". ¿Cómo se configura SBT para usar un valor especial "-Xmx" para ejecutar una aplicación con "correr" acción?

¿Fue útil?

Solución

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)
    })
}

Otros consejos

Para los procesos bifurcados usted debe buscar en Build.scala

Para modificar las opciones de Java para los procesos bifurcados que necesita especificarlos en la Build.scala (o nombre que le asignó su construcción) como esto:

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

Esto le dará las opciones apropiadas sin modificar JAVA_OPTS a nivel mundial, y se pondrá JAVA_OPTS personalizadas en una SBT generada puesta en escritura

no bifurcada procesa sea más conveniente para ajustar la configuración a través de sbtopts o sbtconfig dependiendo de la versión SBT.

Desde SBT 0.13.6 .sbtconfig está en desuso . Modificar /usr/local/etc/sbtopts lo largo de estas líneas:

-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 de auto-contenida.

Antes de SBT 0.13.6 podría configurar las opciones en .sbtconfig para no bifurcadas procesos:

  1. Comprobar donde SBT es:

    $ which sbt
    /usr/local/bin/sbt
    
  2. ver 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. Establecer las opciones de JVM correctas para prevenir OOM (tanto regular como PermGen):

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

Si desea SBT_OPTS ajustarse para la ejecución actual de SBT puede utilizar env SBT_OPTS=".." sbt según lo sugerido por Googol Shan. O puede utilizar la opción añadida en Sbt 12: sbt -mem 2048. Esto se pone difícil de manejar para listas más largas de opciones, pero podría ayudar si usted tiene diferentes proyectos con diferentes necesidades.

Tenga en cuenta que CMSClassUnloadingEnabled en concierto con UseConcMarkSweepGC ayuda a mantener el espacio limpio PermGen, pero dependiendo de lo que los marcos de usar que puede tener una fuga real en PermGen, que finalmente fuerza un reinicio.

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

$sbt -mem 2048 

Si ejecuta SBT en el caparazón de Linux, puede utilizar:

env JAVA_OPTS="-Xmx512m" sbt run

Esta es mi comando por lo general se utiliza para ejecutar mi proyecto SBT.

.sbtconfig está en desuso empezando con SBT 0.13.6. En su lugar, he configurado 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

Uso JAVA_OPTS para el ajuste con la variable de entorno.

Use opciones -J-X para SBT para las opciones individuales, por ejemplo, -J-Xmx2048 -J-XX: MaxPermSize = 512

Las nuevas versiones de SBT tienen una opción "MEM".

Hay una manera que conozco. Establecer las variables JAVA_OPTS medio ambiente.

JAVA_OPTS='-Xmx512m'

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

El javaOptions += "-XX:MaxPermSize=1024" en nuestra build.sbt como se indica por @iwein anteriormente trabajó para nosotros cuando estábamos viendo un java.lang.OutOfMemoryError lanzado durante la ejecución de las pruebas Specs2 través de SBT.

La variable de entorno es _JAVA_OPTIONS, que debe ser ajustado. Una vez que establecer _JAVA_OPTIONS, y cuando SBT, SBT mostrará el mensaje utilizando JAVA_OPTIONS y los valores.

Alternativamente, usted podría establecer javaOption en el SBT o .scala archivo por ejemplo

javaOptions += "-Xmx1G"

A partir de SBT concha podría ejecutar la demostración javaOptions para ver los valores establecidos.

    javaOptions in Test += "-Xmx1G"

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

SBT le permite listar las opciones de JVM se necesitan para ejecutar el proyecto en un archivo llamado

.jvmopts

en la raíz de su proyecto. a continuación, añadir las opciones de Java que desea

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

que se ha probado y funciona en Windows 10 https://www.lagomframework.com/documentation/1.4.x/ Scala / JVMMemoryOnDev.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top