Configuración de parámetros de inicio de JVM

Protector4J permite configurar los parámetros de inicio de JVM durante el empaquetado, así como agregarlos temporalmente o modificar directamente el script de inicio generado después del despliegue. Para otros parámetros avanzados en la GUI, consulte Configuración del modo avanzado de Protector4J.

1. Tres métodos de configuración

MétodoÁmbito de efecto¿Se mantiene al reempaquetar?Usos recomendados
JVM startup options en la GUIEscribir todos los scripts de inicio de plataforma generados en esta ocasiónSí, se puede generar nuevamente mientras los parámetros de la tarea sigan estando disponiblesEmpaquetado interactivo diario
--jvm-option en la CLIEscribir todos los scripts de inicio de plataforma generados en esta ocasiónSí, los scripts de comandos/tareas pueden usarse como fuente de configuraciónCI/CD, publicación reutilizable
Modificar run.sh, run.bat o los scripts de TomcatSolo modificar el directorio de despliegue actual.No, el reempaquetado sobrescribirá los cambios.Ajustes de emergencia o específicos del entorno después del despliegue.
Variables de entorno APP_JAVA_OPTS.Solo afecta al proceso actual o al entorno actual.No escribir en archivos.Diagnóstico temporal, inyección en entornos de contenedores/servicios.

Se recomienda colocar los parámetros a largo plazo en tareas GUI o comandos CLI, y utilizar APP_JAVA_OPTS como sobrescritura temporal. Después de modificar directamente el script de generación, se deben registrar los cambios en la configuración de despliegue; serán necesarios nuevamente al reempaquetar la próxima vez.

2. Configuración desde la GUI

  1. Seleccione Advanced — customise the options yourself en la página de entrada; en el modo simplificado, haga clic en Customize… en la página final para acceder a los parámetros avanzados.
  2. Busque JVM startup options dentro de Common options.
  3. Introduzca un parámetro completo por línea, por ejemplo:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
  1. Revise los parámetros finales en el resumen y luego ejecute la protección.

Estos parámetros se escribirán automáticamente en los archivos generados run.sh y run.bat; run.command para macOS redirige a run.sh, por lo que se utilizan los mismos parámetros. Los parámetros de Tomcat también se incluirán en las rutas de inicio de bin/catalina.sh y bin/catalina.bat. Library Encryption solo genera archivos archivados y no scripts de inicio, por lo que no se ofrece esta configuración.

Opciones de inicio de JVM en la GUI

3. Configuración desde la CLI

Cada parámetro debe utilizar --jvm-option una sola vez; no combine varios parámetros de JVM en un único valor:

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

Spring Boot:

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

Tomcat:

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

Los parámetros individuales que contengan espacios o caracteres especiales deben citarse en su totalidad:

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

El codificador escapará los valores para scripts shell y batch según los límites de cada parámetro.

4. macOS / Linux: modifique directamente los scripts.

En aplicaciones comunes de Java y Spring Boot, edite el directorio de salida run.sh. run.command solo redirige a run.sh, por lo que no es necesario realizar modificaciones adicionales.

Busque JVM_OPTS=(...) y, si existe, JVM_OPTS+=(...), y añada una línea antes de APP_JAVA_OPTS:

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

No elimine los parámetros --add-opens, --module-path o --add-modules ya generados por Spring Boot/JavaFX.

Edite bin/catalina.sh en Tomcat y añada un contenido después de JVM_OPTS=(...) en run_java():

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

Esta modificación afecta tanto al funcionamiento en tiempo real de run.sh como al inicio en segundo plano de bin/startup.sh.

5. Windows: Modificar directamente el script.

Editar run.bat en las aplicaciones comunes de Java y Spring Boot para cambiar el directorio de salida. Encuentre la línea generada set "JVM_OPTS=..." y, antes de la evaluación en APP_JAVA_OPTS, añada lo siguiente:

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

Mantenga el contenido original de JVM_OPTS; no elimine los parámetros internos necesarios para Spring Boot/JavaFX.

Ejecución en primer plano de Tomcat en Windows.

Edite bin\catalina.bat y, después del contenido existente en set "JVM_OPTS=...", añada lo siguiente:

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

Esto afectará a run.bat o bin\catalina.bat run.

Inicio en segundo plano de Tomcat en Windows.

bin\startup.bat utiliza PowerShell para crear un proceso en segundo plano. La forma más sencilla de realizar cambios permanentes es configurar APP_JAVA_OPTS antes de llamar a catalina.bat:

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

Si se desea soportar tanto la interfaz frontal como la posterior sin mantener scripts separados en ambos lugares, es preferible generar nuevamente el paquete de Tomcat mediante --jvm-option a través de la GUI o CLI.

6. Uso temporal de APP_JAVA_OPTS.

macOS / Linux

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

Tomcat:

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

Windows CMD

Se configura en la sesión actual de CMD (los comandos posteriores heredarán estos ajustes; use set APP_JAVA_OPTS= para eliminarlos).

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

Solo tiene efecto en el ámbito local; al ejecutarse, se restaura el entorno original.

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

Tomcat:

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

Windows PowerShell

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

7. Orden de los parámetros y consideraciones importantes.

  • Los parámetros esenciales generados por la herramienta van primero, seguidos por los parámetros configurados a través de la GUI/CLI, y finalmente APP_JAVA_OPTS se agrega al final.
  • Los valores que aparecen después de algunos parámetros JVM sobrescriben a los valores anteriores, pero no todos los parámetros permiten repeticiones; se debe evitar depender de la sobrescritura mediante parámetros repetidos.
  • APP_JAVA_OPTS se divide por espacios, por lo que no es adecuado para parámetros simples complejos que contengan espacios; para este tipo de parámetros, es preferible utilizar la GUI, --jvm-option o editar directamente el array de scripts.
  • Los parámetros de JVM deben encontrarse antes de la clase principal o de -jar; los parámetros de la aplicación se colocan después de las órdenes run.sh/run.bat.
  • Después de modificar el tamaño del heap, es necesario verificarlo teniendo en cuenta las limitaciones de memoria del contenedor, la memoria disponible del sistema operativo y la carga real.
  • Al reempaquetar, se sobrescribirá el script de inicio; los cambios manuales no se integrarán automáticamente.