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
ForkRunclase: 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-Xmx2Gagrega el parámetro a la línea de comando del proceso sbt, sin embargo,-Xmx1536msbt 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?

mempará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
sbtcontienen errores que anulan estas configuraciones, use labrew upgrade sbtúltimasbtpara Mac (asumiendo la instalación de brew) (IDK para Linux). https://github.com/sbt/sbt/issues/2945#issuecomment-277490848fuente
-Xmx1546mtodaví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.0A partir de marzo de 2015, si está utilizando sbt en OSX con Homebrew , debe editar el archivo
/usr/local/etc/sbtoptsp.ej
# set memory options # #-mem <integer> -mem 2048fuente
/etc/sbt-launcher-packaging./etc/sbt/sbtoptsSBT_OPTS=-Xmx2G sbtpara 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.bashEntonces 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-Xms4Gfuente
export SBT_OPTS="..."en~/.sbtconfighace el trabajo hecho.En Windows, para sbt 0.13.9.2, debe establecer
JAVA_OPTSlas opciones de jvm que desee.> set JAVA_OPTS=-Xmx1G > sbt assemblyEl
sbt.batscript carga sus valores predeterminados desdeconf\sbtconfig.txtdentro,CFG_OPTSpero los usará en suJAVA_OPTSlugar 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/sbtarchivo 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_OPTSingrese se mantendrá (su -Xmx tendrá prioridad). Además, la primera línea del script ejecutará cualquier comando~/.sbtconfigsi 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_profilecada vez que haga un cambio enSBT_OPTSfuente
-memparámetro en/usr/local/etc/sbtoptsSi ejecuta sbt desde PowerShell, configure la
SBT_OPTsvariable 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.txtarchivo. Simplemente edite los valores aquí. Cambiar-Xmx512Ma-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\confse 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
.jvmoptsarchivo en la raíz de su proyecto (de la documentación de Lagom Framework ):$ cat .jvmopts -Xms512M -Xmx4096M -Xss2M -XX:MaxMetaspaceSize=1024Mfuente
En mi caso, la configuración de mi servicio estaba sobrescribiendo la variable de entorno
SBT_OPTSyJAVA_OPTS. Pude establecer los límites estableciendobuild.sbtlo siguiente:javaOptions in Universal ++= Seq( "-J-Xms1g", "-J-Xmx2g")Referencia: https://www.scala-sbt.org/sbt-native-packager/archetypes/java_app/customize.html
fuente