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