Estoy usando SBT 0.12.0. He leído otras respuestas en el desbordamiento de pila y las seguí, sin embargo, ninguna de ellas ayuda, por ejemplo:
- crear
ForkRun
clase: no he observado ningún proceso bifurcado durante mi 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
agrega el parámetro a la línea de comando del proceso sbt, sin embargo,-Xmx1536m
sbt usa el valor anterior en lugar del parámetro agregado.
¿Me estoy perdiendo de algo? ¿Cómo configuro el tamaño del montón para sbt 0.12, al realizar tanto pruebas como run
?
mem
parámetro al iniciar sbt? (psbt -mem2000
. ej. )Respuestas:
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 pila 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 labrew upgrade sbt
últimasbt
para Mac (asumiendo la instalación de brew) (IDK para Linux). https://github.com/sbt/sbt/issues/2945#issuecomment-277490848fuente
-Xmx1546m
todavía existe en la línea de comando y el tamaño máximo del montón todavía está limitado a 1,5 GB, como se muestra en visualvm.Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=4G; support was removed in 8.0
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
fuente
/etc/sbt-launcher-packaging
./etc/sbt/sbtopts
SBT_OPTS=-Xmx2G sbt
para iniciar SBT, aumentará el montón según sea necesario hasta un máximo de 2 GB."sbt -mem 23000 run" funciona para mí.
fuente
He encontrado la solución. No importa cómo especifique el tamaño del montón 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
Entonces 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[@]}"
Quita la
-
línea.Ahora, cuando ejecute SBT, ya no anulará la configuración del tamaño del montón de JVM. Puede especificar la configuración del tamaño del montón usando la respuesta de @ Noan.
O alternativamente:
sbt -J-Xmx4G -J-Xms4G
fuente
export SBT_OPTS="..."
en~/.sbtconfig
hace el trabajo hecho.En Windows, para sbt 0.13.9.2, debe establecer
JAVA_OPTS
las opciones de jvm que desee.> set JAVA_OPTS=-Xmx1G > sbt assembly
El
sbt.bat
script carga sus valores predeterminados desdeconf\sbtconfig.txt
dentro,CFG_OPTS
pero los usará en suJAVA_OPTS
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! )
. . . (saltar). . .
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 %*
fuente
Estaba buscando resolver un problema como este en Mac OS X con una instalación casera de SBT. Si instaló SBT a través de homebrew, está libre ya que el
/usr/local/bin/sbt
archivo se ve así#!/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
SBT_OPTS
ingrese se mantendrá (su -Xmx tendrá prioridad). Además, la primera línea del script ejecutará cualquier comando~/.sbtconfig
si existe, por lo que puede ser un mejor lugar para colocar sus opciones SBT si está jugando bastante con ellas. No tendrá que hacerlosource ~/.bash_profile
cada vez que haga un cambio enSBT_OPTS
fuente
-mem
parámetro en/usr/local/etc/sbtopts
Si ejecuta sbt desde PowerShell, configure la
SBT_OPTs
variable de entorno, así:$env:SBT_OPTS="-Xms512M -Xmx1024M -Xss2M -XX:MaxMetaspaceSize=1024M"
Entonces corre:
fuente
Para SBT versión 1.0.4 en Windows, la configuración predeterminada de JVM proviene del
sbt\conf\sbtconfig.txt
archivo. Simplemente edite los valores aquí. Cambiar-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, donde hacer los ajustes vienen, es comentando esta línea en el archivo por lotes:@echo off
.fuente
sbt\conf
se coloca en el directorio de usuario, sino en la carpeta Archivos de programa, comoC:\Program Files (x86)\sbt\conf
.Una forma rápida de hacerlo es con un
.jvmopts
archivo en la raíz de su proyecto (de la documentación de Lagom Framework ):$ cat .jvmopts -Xms512M -Xmx4096M -Xss2M -XX:MaxMetaspaceSize=1024M
fuente
En mi caso, la configuración de mi servicio estaba sobrescribiendo la variable de entorno
SBT_OPTS
yJAVA_OPTS
. Pude establecer los límites estableciendobuild.sbt
lo siguiente:javaOptions in Universal ++= Seq( "-J-Xms1g", "-J-Xmx2g")
Referencia: https://www.scala-sbt.org/sbt-native-packager/archetypes/java_app/customize.html
fuente