www update org scala sbt

scala - update - Cómo establecer el tamaño del montón para sbt?



scala sbt ubuntu (8)

"sbt -mem 23000 run" funciona para mí.

Estoy usando SBT 0.12.0. He leído otras respuestas sobre el desbordamiento de pila y las he seguido, sin embargo, ninguna de ellas ayuda, por ejemplo:

  • crear la clase ForkRun : no he observado ningún proceso bifurcado durante el uso de sbt
  • establecer la variable de entorno JAVA_OPTS - está establecida, pero la línea de comando de proceso de sbt no parece usarla en absoluto.
  • sbt -J-Xmx2G añade el parámetro a la línea de comando de proceso sbt, sin embargo, el valor anterior -Xmx1536m es utilizado por sbt en lugar del parámetro anexo.

¿Me estoy perdiendo de algo? ¿Cómo configuro el tamaño del almacenamiento dinámico para sbt 0.12, al realizar pruebas y run ?


A partir de marzo de 2015, si está utilizando sbt en OSX con Homebrew , debe editar el archivo /usr/local/etc/sbtopts

p.ej

# set memory options # #-mem <integer> -mem 2048


En Windows, para sbt 0.13.9.2, debe establecer JAVA_OPTS a las opciones de jvm que desee.

> set JAVA_OPTS=-Xmx1G > sbt assembly

El script sbt.bat carga sus valores predeterminados de conf/sbtconfig.txt en CFG_OPTS pero usará JAVA_OPTS en su lugar si está configurado.

Extractos relevantes de sbt.bat :

rem FIRST we load the config file of extra options. set FN=%SBT_HOME%/../conf/sbtconfig.txt set CFG_OPTS= FOR /F "tokens=* eol=# usebackq delims=" %%i IN ("%FN%") DO ( set DO_NOT_REUSE_ME=%%i rem ZOMG (Part #2) WE use !! here to delay the expansion of rem CFG_OPTS, otherwise it remains "" for this loop. set CFG_OPTS=!CFG_OPTS! !DO_NOT_REUSE_ME! )

. . . (omitir). . .

rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config. set _JAVA_OPTS=%JAVA_OPTS% if "%_JAVA_OPTS%"=="" set _JAVA_OPTS=%CFG_OPTS% :run "%_JAVACMD%" %_JAVA_OPTS% %SBT_OPTS% -cp "%SBT_HOME%sbt-launch.jar" xsbt.boot.Boot %*


Estaba buscando resolver un problema como este en Mac OS X con una instalación homebrew de SBT. Si instaló SBT a través de homebrew, está limpio ya que el archivo /usr/local/bin/sbt ve como

#!/bin/sh test -f ~/.sbtconfig && . ~/.sbtconfig exec java -Xmx512M ${SBT_OPTS} -jar /usr/local/Cellar/sbt/0.12.3/libexec/sbt-launch.jar "$@"

Esto significa que cualquier configuración que ponga en SBT_OPTS mantendrá (su -Xmx tendrá prioridad). Además, la primera línea del script ejecutará los comandos en ~/.sbtconfig si existe, por lo que puede ser un mejor lugar para poner sus opciones de SBT si está jugando con ellos bastante. No tendrá que SBT_OPTS source ~/.bash_profile cada vez que realice un cambio en SBT_OPTS


He encontrado la solución. No importa cómo especifique el tamaño del almacenamiento dinámico de JVM, nunca funcionará porque el ejecutable SBT ya lo tiene anulado.

Hay una línea en el ejecutable SBT que dice:

. /usr/share/sbt/sbt-launch-lib.bash

Así que edité el archivo:

# run sbt execRunner "$java_cmd" / ${SBT_OPTS:-$default_sbt_opts} / - $(get_mem_opts $sbt_mem) / ${java_opts} / ${java_args[@]} / -jar "$sbt_jar" / "${sbt_commands[@]}" / "${residual_args[@]}"

Retire la línea.

Ahora cuando ejecuta SBT, ya no anulará la configuración del tamaño de almacenamiento JVM. Puede especificar la configuración de tamaño de pila con la respuesta de @ Noan.

O alternativamente:

sbt -J-Xmx4G -J-Xms4G


Necesitas SBT_OPTS , esto es lo que uso en mi .bash_profile:

export SBT_OPTS="-Xmx1536M -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M -Duser.timezone=GMT"

ACTUALIZACIÓN: para obtener su espacio de almacenamiento dinámico 2G puede usar esto:

export SBT_OPTS="-Xmx2G -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=2G -Xss2M -Duser.timezone=GMT"

NOTA: SBT DEBE SER LA ÚLTIMA VERSIÓN

Las versiones anteriores de sbt contienen errores que anulan estas configuraciones, use brew upgrade sbt para el último sbt para Mac (suponiendo que se instale brew) (IDK para Linux). https://github.com/sbt/sbt/issues/2945#issuecomment-277490848


Para SBT versión 1.0.4 en Windows, la configuración de JVM predeterminada proviene del sbt/conf/sbtconfig.txt . Simplemente edite los valores aquí. Cambie -Xmx512M a -Xmx2048M .

Esta no es la única fuente de opciones de JVM para SBT. Otros se pueden encontrar inspeccionando sbt.bat . Una forma sencilla de diagnosticar, de dónde provienen las configuraciones, es comentando esta línea en el archivo por lotes: @echo off .


Si está ejecutando sbt desde PowerShell, establezca la variable de entorno SBT_OPTs , así:

$env:SBT_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M"

Entonces corre:

sbt