¿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"?
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)
})
}
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 :
-
Compruebe dónde sbt is:
$ which sbt /usr/local/bin/sbt
-
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 "$@"
-
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.
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
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.
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
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.
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".
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.
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.
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
).
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
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