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?
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?
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:
-
Comprobar donde SBT es:
$ which sbt /usr/local/bin/sbt
-
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 "$@"
-
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