Opciones de inicio de la JVM

Protector4J permite fijar las opciones de inicio de la JVM al empaquetar, añadirlas temporalmente tras el despliegue o editar directamente los scripts de arranque generados. Las demás opciones avanzadas de la interfaz gráfica se explican en Ajustes del modo avanzado de Protector4J.

1. Cuatro maneras de establecerlas

MétodoAlcance¿Sobrevive a un nuevo empaquetado?Más indicado para
Opciones de inicio de la JVM en la interfaz gráficaLos scripts de arranque generados para todas las plataformas en esta ejecuciónSí, mientras conserve los ajustes de la tareaEmpaquetado interactivo del día a día
--jvm-option en la línea de comandosLos scripts de arranque generados para todas las plataformas en esta ejecuciónSí; el comando o el archivo de tarea son la fuente de referenciaCI/CD y compilaciones reproducibles
Editar run.sh, run.bat o los scripts de TomcatSolo el directorio desplegado que haya editadoNo; volver a empaquetar lo sobrescribeAjustes urgentes o propios de un entorno tras el despliegue
Variable de entorno APP_JAVA_OPTSSolo el proceso o el entorno actualNo se escribe nada en discoDiagnóstico puntual e inyección desde un contenedor o un servicio

Guarde las opciones duraderas en la tarea de la interfaz gráfica o en el comando, y use APP_JAVA_OPTS para sustituciones puntuales. Si edita un script generado, anote el cambio en su documentación de despliegue: tendrá que volver a aplicarlo la próxima vez que empaquete.

2. Establecerlas en la interfaz gráfica

  1. En la página de entrada, elija Avanzado — personalice las opciones usted mismo. Desde el modo simple, haga clic en Personalizar... en la página final para llegar a las opciones avanzadas.
  2. Dentro de Opciones comunes, busque Opciones de inicio de la JVM.
  3. Escriba una opción completa por línea, por ejemplo:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
  1. Compruébelas en el resumen final y ejecute entonces la protección.

Las opciones se escriben en los run.sh y run.bat generados. En macOS, run.command llama al mismo run.sh, así que usa las mismas opciones. En Tomcat se colocan además en las rutas de arranque de bin/catalina.sh y bin/catalina.bat. El cifrado de bibliotecas solo produce un archivo y ningún script de arranque, por lo que allí el campo está desactivado.

Opciones de inicio de la JVM en la interfaz gráfica

3. Establecerlas en la línea de comandos

Repita --jvm-option una vez por opción. No agrupe varias opciones de la JVM en un mismo valor.

p4j javaapp app.jar dist \
  --jvm-option -Xms512m \
  --jvm-option -Xmx2g \
  --jvm-option -Dfile.encoding=UTF-8

Para Spring Boot:

p4j springboot app.jar dist \
  --jvm-option -Xms1g \
  --jvm-option -Xmx2g

Para Tomcat:

p4j tomcat app.war dist \
  --context /app \
  --jvm-option -Xms1g \
  --jvm-option -Xmx2g

Entrecomille por completo una opción que contenga espacios o caracteres especiales:

--jvm-option '-Dexample.message=hello world'

El empaquetador escapa cada opción por separado para los scripts de shell y los de lotes, respetando esos límites.

4. Editar los scripts en macOS y Linux

En aplicaciones Java corrientes y Spring Boot, edite run.sh en el directorio de salida. run.command se limita a delegar en run.sh, así que no hay nada que cambiar allí.

Busque la línea generada JVM_OPTS=(...) y las posibles JVM_OPTS+=(...) posteriores, y añada su propia línea antes de la comprobación de APP_JAVA_OPTS.

JVM_OPTS+=("-Xms512m" "-Xmx2g" "-Dfile.encoding=UTF-8")
if [ -n "${APP_JAVA_OPTS:-}" ]; then
  # ...
fi

No elimine las opciones --add-opens, --module-path ni --add-modules que el empaquetador generó para Spring Boot o JavaFX.

En Tomcat, edite bin/catalina.sh y añada su línea después de JVM_OPTS=(...) dentro de run_java().

run_java() {
  JVM_OPTS=(...)
  JVM_OPTS+=("-Xms1g" "-Xmx2g")
  # ...
}

Esto cubre tanto la ejecución en primer plano con run.sh como el arranque en segundo plano con bin/startup.sh.

5. Editar los scripts en Windows

En aplicaciones Java corrientes y Spring Boot, edite run.bat en el directorio de salida. Busque la línea generada set "JVM_OPTS=..." y añada la suya antes de la comprobación de APP_JAVA_OPTS:

set "JVM_OPTS=%JVM_OPTS% -Xms512m -Xmx2g -Dfile.encoding=UTF-8"
if defined APP_JAVA_OPTS set "JVM_OPTS=%JVM_OPTS% %APP_JAVA_OPTS%"

Conserve el contenido existente de JVM_OPTS. No elimine las opciones internas que necesitan Spring Boot o JavaFX.

Tomcat en primer plano en Windows

Edite bin\catalina.bat y añada su línea después del set "JVM_OPTS=..." existente:

set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"

Vale para run.bat y para bin\catalina.bat run.

Tomcat en segundo plano en Windows

bin\startup.bat crea el proceso en segundo plano mediante PowerShell. La forma más sencilla de cambiarlo de manera permanente es establecer APP_JAVA_OPTS antes de que llame a catalina.bat:

@echo off
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
call "%~dp0catalina.bat" start %*
exit /b %ERRORLEVEL%

Si quiere cubrir primer y segundo plano sin mantener dos scripts, es más práctico regenerar el paquete de Tomcat con --jvm-option desde la interfaz o la línea de comandos.

6. Usar APP_JAVA_OPTS para una sola ejecución

macOS y Linux

APP_JAVA_OPTS="-Xms512m -Xmx2g" ./run.sh

Para Tomcat:

APP_JAVA_OPTS="-Xms1g -Xmx2g" ./bin/startup.sh

CMD de Windows

Establézcala para la sesión actual de CMD. Los comandos posteriores la heredan; para borrarla use set APP_JAVA_OPTS=.

set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
run.bat

Para limitarla y restaurar el entorno después:

setlocal
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
call run.bat
endlocal

Para Tomcat:

set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
bin\startup.bat

PowerShell de Windows

$env:APP_JAVA_OPTS = '-Xms512m -Xmx2g'
.\run.bat
Remove-Item Env:APP_JAVA_OPTS

7. Orden y advertencias

  • Primero van las opciones que genera la herramienta, luego las que establezca en la interfaz o la línea de comandos, y APP_JAVA_OPTS se añade al final.
  • En algunas opciones de la JVM un valor posterior sustituye a otro anterior, pero no todas pueden repetirse sin riesgo: no confíe en la repetición para sobrescribir.
  • APP_JAVA_OPTS se divide por espacios, de modo que no puede transportar una única opción que los contenga. Para esos casos use la interfaz, --jvm-option o edite el array del script.
  • Las opciones de la JVM van antes de la clase principal o de -jar; los argumentos de la aplicación van después del comando run.sh o run.bat.
  • Tras cambiar los tamaños de memoria, contrástelos con el límite del contenedor, la memoria disponible del anfitrión y su carga real.
  • Volver a empaquetar sobrescribe los scripts de arranque, y los cambios manuales no se reincorporan automáticamente.