www update org scala sbt

scala - update - ¿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?



scala sbt ubuntu (11)

El javaOptions += "-XX:MaxPermSize=1024" en nuestro build.sbt como se hace referencia en @iwein arriba funcionó para nosotros cuando estábamos viendo un java.lang.OutOfMemoryError lanzado mientras se ejecutaban pruebas de Specs2 a través de sbt.

Mi aplicación realiza un procesamiento de matrices de datos de gran tamaño y necesita más memoria que la que da 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"?


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

$sbt -mem 2048


Hay una forma 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.


La variable de entorno es _JAVA_OPTIONS, que debe establecerse. Una vez que configura _JAVA_OPTIONS, y cuando lo hace, sbt mostrará el mensaje usando JAVA_OPTIONS y los valores.

Alternativamente, puede establecer javaOption en el archivo sbt o .scala, por ejemplo

javaOptions += "-Xmx1G"

Desde sbt shell puede ejecutar show javaOptions para ver los valores que están configurados.


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


Si ejecuta sbt en linux shell, puede usar:

env JAVA_OPTS="-Xmx512m" sbt run

Este es mi comando generalmente utilizado para ejecutar mi proyecto sbt.


Use JAVA_OPTS para establecer con la variable de entorno.

Utilice -JX opciones para sbt para opciones individuales, por ejemplo, -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 cambio, 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


Para procesos bifurcados debes mirar Build.scala

Para modificar las opciones de Java para los procesos bifurcados, debe especificarlos en 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 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 mediante sbtopts o sbtconfig según su versión de sbt.

Como sbt 0.13.6 .sbtconfig está en desuso . Modifique /usr/local/etc/sbtopts en esta línea:

-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 , puede establecer las opciones en .sbtconfig para procesos no bifurcados :

  1. Compruebe dónde está sbt:

    $ which sbt /usr/local/bin/sbt

  2. Mira los contenidos:

    $ 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. Establezca las opciones 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 solo para la ejecución actual de sbt, puede usar env SBT_OPTS=".." sbt como lo sugiere 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 de PermGen, pero dependiendo de los marcos que utilice, es posible que tenga una fuga real en PermGen, lo que eventualmente obligará a reiniciar.


javaOptions in Test += "-Xmx1G"

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