Mi aplicación procesa matrices de datos grandes y necesita más memoria que la que proporciona la JVM de forma predeterminada. Sé que en Java está especificado por la opción "-Xmx". ¿Cómo configuro SBT para usar un valor "-Xmx" particular para ejecutar una aplicación con la acción "ejecutar"?
97
javaOptions += "-Xmx1G"
javaOptions
sólo tienen efecto para la JVM en horquilla (véase scala-sbt.org/0.13/docs/Forking.html )fork in run := ture
habilitacionesjavaOptions
Para procesos bifurcados, debe mirar Build.scala
Para modificar las opciones de java para procesos bifurcados, debe especificarlas en Build.scala (o como sea que haya llamado su compilación) de esta manera:
Esto le dará las opciones adecuadas sin modificar JAVA_OPTS globalmente, y colocará JAVA_OPTS personalizado en un script de inicio generado por sbt
Para procesos no bifurcados , es más conveniente establecer la configuración a través de
sbtopts
osbtconfig
dependiendo de su versión de sbt.Dado que sbt 0.13.6
.sbtconfig
está en desuso . Modifique/usr/local/etc/sbtopts
siguiendo estas líneas:También puede crear un
.sbtopts
archivo en la raíz de su proyecto SBT usando la misma sintaxis que en el/usr/local/etc/sbtopts
archivo. Esto hace que el proyecto sea autónomo.Antes de sbt 0.13.6 , podía configurar las opciones en .sbtconfig para procesos no bifurcados :
Compruebe dónde está sbt:
Mira el contenido:
Configure las opciones jvm correctas para prevenir OOM (tanto regular como PermGen):
Si desea configurar SBT_OPTS solo para la ejecución actual de sbt, puede usarlo
env SBT_OPTS=".." sbt
como lo 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 de opciones más largas, pero podría ayudar si tiene diferentes proyectos con diferentes necesidades.Tenga en cuenta que CMSClassUnloadingEnabled en conjunto con UseConcMarkSweepGC ayuda a mantener limpio el espacio de PermGen, pero dependiendo de los marcos que use, es posible que tenga una fuga real en PermGen, que eventualmente fuerza un reinicio.
fuente
.sbtopts
archivo en la raíz de su proyecto SBT utilizando la misma sintaxis que en el/usr/local/etc/sbtopts
archivo. Esto hace que su proyecto sea autónomo, lo que puede ser muy útil en situaciones de CI.En sbt versión 12 en adelante, hay una opción para esto:
fuente
Not a valid command: mem (similar: set)
Si ejecuta sbt en linux shell, puede usar:
Este es mi comando de uso habitual para ejecutar mi proyecto sbt.
fuente
override def fork
solución anterior. (sbt 0.7.7).sbtconfig
está en desuso a partir de SBT0.13.6
. En cambio, configuré estas opciones/usr/local/etc/sbtopts
de la siguiente manera:fuente
-J-Xss1M
es un poco bajo para clases de casos grandes, 4M parece ser más seguro.Hay una forma que conozco. Establezca la variable de entorno JAVA_OPTS.
No he encontrado una manera de hacer esto como parámetro de comando.
fuente
Utilice JAVA_OPTS para configurar con la variable de entorno.
Utilice las opciones -JX para sbt para opciones individuales, por ejemplo, -J-Xmx2048 -J-XX: MaxPermSize = 512
Las versiones más recientes de sbt tienen una opción "-mem".
fuente
El
javaOptions += "-XX:MaxPermSize=1024"
en nuestro build.sbt como lo hace referencia @iwein anteriormente funcionó para nosotros cuando veíamos un java.lang.OutOfMemoryError lanzado mientras ejecutamos pruebas Specs2 a través de sbt.fuente
La variable de entorno es _JAVA_OPTIONS, que debe configurarse. Una vez que establezca _JAVA_OPTIONS, y cuando sbt, sbt mostrará el mensaje usando JAVA_OPTIONS y los valores.
Alternativamente, puede configurar javaOption en el archivo sbt o .scala, por ejemplo
Desde el shell sbt, puede ejecutar show javaOptions para ver los valores establecidos.
fuente
Esto establece las opciones de JVM para las pruebas. Funciona también con jvm forking (
fork in Test := true
).fuente
build.sbt
?javaOptions in ThisBuild += "-Xmx1G"
ojavaOptions in (ThisBuild, Test) += "-Xmx1G"
sbt le permite enumerar las opciones de JVM que necesita para ejecutar su proyecto en un archivo llamado
.jvmopts
en la raíz de su proyecto. luego agregue las opciones de Java que desee
está probado y funciona en Windows 10 https://www.lagomframework.com/documentation/1.4.x/scala/JVMMemoryOnDev.html
fuente