2010-10-06 12 views

Respuesta

15

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

Esto no está actualizado, ahora puedes usar 'javaOptions + =" -Xmx1G "' – iwein

+0

@iwein el contenido de mi publicación parece ser muy importante para ti. – Arne

+5

sí, es Arne, espero que no te importe. – iwein

5

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.

37

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.

+0

Muchas gracias. Un buen comando para saber. Nunca supe de ese "env" y me perdí esa herramienta muchas veces. – Ivan

+4

¡Hmm, esto no funcionó para mí! Necesitaba la solución 'anular def fork' anterior. (sbt 0.7.7) –

+2

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

96

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:

  1. comprobar dónde SBT es:

    $ which sbt 
    /usr/local/bin/sbt 
    
  2. 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]" 
    
  3. 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.

+0

@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

+0

@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

+0

@Anand ver la respuesta de Piotrek a continuación y mi actualización. – iwein

60

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

$sbt -mem 2048 
+5

en win 8.1, este comando no funcionó para mí: 'No es un comando válido: mem (similar: establecer)' –

4

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.

+1

@UwePlonus responde la pregunta. – VasyaNovikov

5

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".

18

.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:

variables
-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 
+1

gracias por una adición útil. – iwein

+0

Sí, esta es la forma correcta de hacerlo. – veegee

+0

'-J-Xss1M' es un poco bajo para clases de cajas grandes, 4M parece ser más seguro. –

3

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.

1
javaOptions in Test += "-Xmx1G" 

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

+1

donde se establece en 'build.sbt'? – javadba

+0

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

Cuestiones relacionadas