Mi aplicación realiza un procesamiento de matrices de datos grandes y necesita más memoria que la que JVM proporciona 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"?Cómo especificar el tamaño de almacenamiento dinámico máximo de JVM "-Xmx" para ejecutar una aplicación con la acción "ejecutar" en SBT?
Respuesta
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)
})
}
Hay una manera que conozco. Establezca la variable de entorno JAVA_OPTS.
JAVA_OPTS='-Xmx512m'
No he encontrado una manera de hacer esto como un parámetro de comando.
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.
Muchas gracias. Un buen comando para saber. Nunca supe de ese "env" y me perdí esa herramienta muchas veces. – Ivan
¡Hmm, esto no funcionó para mí! Necesitaba la solución 'anular def fork' anterior. (sbt 0.7.7) –
es posible que su archivo sbt especifique sus propios JAVA_OPTS, en cuyo caso se sobrescribirán. A continuación, puede modificar directamente su archivo sbt, ya sea para eliminar el indicador -Xmx o para cambiarlo al tamaño máximo de almacenamiento dinámico deseado. – nnythm
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 lo que sea que haya llamado su compilación) de esta manera:
val buildSettings = Defaults.defaultSettings ++ Seq(
//…
javaOptions += "-Xmx1G",
//…
)
Esto le dará las opciones adecuadas sin modificari ng JAVA_OPTS a nivel mundial, y pondrá JAVA_OPTS personalizadas en una sbt generated start-script
Para bifurcadas procesos no 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
is deprecated. 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 de .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 configurar las opciones en .sbtconfig para no bifurcadas procesos:
comprobar dónde 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 "[email protected]"
Establecer las opciones de JVM correctas 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 sólo para la ejecución actual de SBT puede utilizar env SBT_OPTS=".." sbt
según lo sugerido por Googol Shan.O puede usar la opción agregada en Sbt 12: sbt -mem 2048
. Esto se vuelve difícil de manejar para listas más largas de opciones, pero podría ser útil si tiene proyectos diferentes con necesidades diferentes.
Tenga en cuenta que CMSClassUnloadingEnabled junto con UseConcMarkSweepGC ayuda a mantener limpio el espacio PermGen, pero dependiendo de los marcos que utilice, es posible que tenga una fuga real en PermGen, lo que finalmente obliga a reiniciar.
@iwein: javaOptions no cambió el espacio de almacenamiento predeterminado para sbt. Revisé jconsole y solo muestra -Xmx512M. Incluso si agrego el SBT_OPTS en ~/.sbtconfig, sigo obteniendo esto en jconsole: -Xmx512M -Xms256M -Xmx1G -XX: MaxPermSize = 256M -XX: + UseConcMarkSweepGC. ¿Ves el Xmx512 en el frente? De alguna manera, no selecciona las javaOptions de Build.scala. ¿Alguna sugerencia? – Anand
@Anand ¿Quizás las cosas funcionan de forma ligeramente diferente en 0.13?Actualizaré la respuesta si me encuentro con algo (puede llevar un tiempo), hágame saber si lo resuelven mientras tanto. – iwein
@Anand ver la respuesta de Piotrek a continuación y mi actualización. – iwein
En la versión SBT 12 en adelante hay una opción para esto:
$sbt -mem 2048
en win 8.1, este comando no funcionó para mí: 'No es un comando válido: mem (similar: establecer)' –
El javaOptions += "-XX:MaxPermSize=1024"
en nuestra build.sbt como se indica más arriba por @iwein trabajado para nosotros cuando estábamos viendo un java.lang.OutOfMemoryError lanzado mientras se ejecutan las pruebas de Specs2 a través de sbt.
@UwePlonus responde la pregunta. – VasyaNovikov
Utilice JAVA_OPTS para establecer con la variable de entorno.
Utilice las opciones de -J-X para sbt para las opciones individuales, p. Ej. -J-Xmx2048 -J-XX: MaxPermSize = 512
Las versiones más nuevas de sbt tienen una opción "-mem".
.sbtconfig
está en desuso, comenzando 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
El entorno es _JAVA_OPTIONS, que necesita ser fijado. Una vez que configura _JAVA_OPTIONS, y cuando lo hace, sbt mostrará el mensaje usando JAVA_OPTIONS y los valores.
alternativa usted puede configurar javaOption en el SBT o .scala presentar por ejemplo
javaOptions += "-Xmx1G"
De cáscara de SBT 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 jvm bifurcación (fork in Test := true
).
donde se establece en 'build.sbt'? – javadba
En cualquier lugar, si tiene un proyecto de 1 módulo. El orden de las definiciones generalmente no importa en SBT. Si tiene múltiples módulos, especifique esto en algunos de ellos o, si lo desea, globalmente a través de 'javaOptions en ThisBuild + =" -Xmx1G "' o 'javaOptions in (ThisBuild, Test) + =" -Xmx1G "' – VasyaNovikov
- 1. ¿Puede el tamaño de almacenamiento dinámico de JVM ser dinámico?
- 2. Aumento del tamaño máximo de almacenamiento dinámico de JVM para aplicaciones con uso intensivo de memoria
- 3. ¿Puedo establecer el tamaño máximo de almacenamiento dinámico de Java para ejecutar desde un archivo jar?
- 4. ¿Cómo puedo determinar el tamaño mínimo de almacenamiento dinámico de JVM desde una aplicación java?
- 5. ¿Cómo configurar un gran tamaño de almacenamiento dinámico de JVM?
- 6. ¿Aumenta el tamaño del almacenamiento dinámico de JVM para Scala?
- 7. Calcular el tamaño de almacenamiento dinámico de jvm para alojar la aplicación web
- 8. efecto secundario para aumentar maxpermsize y el tamaño máximo de almacenamiento dinámico
- 9. parámetros de almacenamiento dinámico de JVM
- 10. ¿Cómo puedo pasar las opciones de JVM a SBT para usarlas al ejecutar la aplicación o los casos de prueba?
- 11. SBT cómo ejecutar InputTask
- 12. Descripción del tamaño máximo de almacenamiento dinámico de JVM: 32 bits frente a 64 bits
- 13. cómo obtener la configuración de tamaño mínimo y máximo de almacenamiento dinámico de una JVM desde un programa Java
- 14. sbt: seleccionando la clase principal para ejecutar
- 15. cómo elegir el tamaño del montón JVM?
- 16. Aplicación de Java que usa mucha memoria. Use -Xmx?
- 17. Leer los parámetros de inicio Java JVM (por ejemplo, -Xmx)
- 18. ¿Cómo puedo ejecutar pruebas de Android con sbt?
- 19. Encontrar el tamaño de almacenamiento dinámico actual con jmap
- 20. Cómo crear un compilador Acción para SBT
- 21. ¿Puedo (y alguna vez quiero) establecer el tamaño de almacenamiento dinámico máximo en .net?
- 22. Ejecutar tarea SBT desde Eclipse
- 23. ¿Cómo ejecutar un proyecto de aplicación administrado por sbt sin sbt?
- 24. hacer: ejecutar una acción para cada requisito
- 25. Configuración del tamaño del almacenamiento dinámico de JVM en el tiempo de ejecución
- 26. Aumentar el tamaño del almacenamiento dinámico en Java
- 27. Ejecutar el método principal de Java desde una aplicación de escritorio Java en una JVM diferente
- 28. Cómo restringir el uso de memoria de la aplicación Java empaquetada en un contenedor (-Xmx no parece funcionar) en Windows
- 29. sbt 0.11 ejecutar ejemplos de tareas necesarios
- 30. ¿Cómo adjuntar una tarea personalizada para ejecutar antes de la tarea de prueba en sbt?
Esto no está actualizado, ahora puedes usar 'javaOptions + =" -Xmx1G "' – iwein
@iwein el contenido de mi publicación parece ser muy importante para ti. – Arne
sí, es Arne, espero que no te importe. – iwein