Konfiguration der JVM-Startparameter

Protector4J ermöglicht es, die JVM-Startparameter bei der Paketierung zu konfigurieren, sowie nach dem Deployment temporär zusätzliche Parameter hinzuzufügen oder die erstellten Startskripte direkt zu ändern. Weitere fortgeschrittene Parameter in der GUI finden Sie unter Einstellungen für den Fortgeschrittenen-Modus von Protector4J.

1. Drei Konfigurationsmethoden

MethodenGeltungsbereichWird beim Neu-Paketieren beibehalten?Empfohlene Anwendungsfälle
JVM startup options in der GUISchreiben aller für diese Generierung erstellten Plattform-StartskripteJa, die Aufgabeparameter können bei Verfügbarkeit erneut genutzt werdenTägliche interaktive Paketierung
CLI’s --jvm-optionSchreiben aller für diese Generierung erstellten Plattform-StartskripteJa, Befehl-/Aufgabenskripte können als Konfigurationsquelle dienenCI/CD, wiederholbare Veröffentlichung
Anpassung von run.sh, run.bat oder Tomcat-SkriptenÄnderung nur im aktuellen BereitstellungsverzeichnisNein, eine erneute Paketierung überschreibt die ÄnderungenNotfallanpassungen oder umgebungsbezogene Anpassungen nach der Bereitstellung
Umgebungsvariablen APP_JAVA_OPTSBetroffen sind nur der aktuelle Prozess oder die aktuelle UmgebungKeine Schreiboperation in DateienTemporäre Diagnose, Einbindung in Container/Dienstumgebungen

Es wird empfohlen, langfristige Parameter in GUI-Aufgaben oder CLI-Befehlen zu platzieren und APP_JAVA_OPTS für temporäre Überschreibungen zu verwenden. Nach einer direkten Änderung der Generierungsdatei sollten die Änderungen in der Bereitstellungskonfiguration festgehalten werden; bei der nächsten Paketierung müssen sie erneut angewendet werden.

2. Konfiguration in der GUI

  1. Wählen Sie auf der Eingabeseite Advanced — customise the options yourself aus; im Einfachmodus kann man auf der letzten Seite auf Customize… klicken, um zu den fortgeschrittenen Parametern zu gelangen.
  2. Finden Sie JVM startup options in Common options.
  3. Geben Sie pro Zeile einen vollständigen Parameter ein, z. B.:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
  1. Überprüfen Sie die Parameter im abschließenden Zusammenfassungsbild und führen Sie anschließend den Schutz durch.

Diese Parameter werden automatisch in die erzeugten Dateien run.sh und run.bat geschrieben; run.command unter macOS leitet auf run.sh weiter, weshalb dieselben Parameter verwendet werden. Die Tomcat-Parameter gelangen außerdem in die Startpfade von bin/catalina.sh und bin/catalina.bat. Library Encryption erzeugt nur Archivdateien, keine Startskripte, weshalb diese Konfiguration nicht verfügbar ist.

JVM-Startoptionen in der GUI

3. Konfiguration in der CLI

Jeder Parameter verwendet einmal --jvm-option – fügen Sie keine mehreren JVM-Parameter zu einem einzigen Wert zusammen:

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

Einzelne Parameter mit Leerzeichen oder Sonderzeichen sollten vollständig eingebettet werden:

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

Der Encoder entlädt die Parameter an den Grenzen für Shell- und Batch-Skripte separat.

4. macOS / Linux: Ändern Sie die Skripte direkt.

Für herkömmliche Java- und Spring Boot-Anwendungen wird der Ausgabekatalog in run.sh bearbeitet. run.command leitet lediglich auf run.sh weiter, daher ist eine erneute Bearbeitung nicht notwendig.

Finden Sie JVM_OPTS=(...) sowie ggf. anschließendes JVM_OPTS+=(...) und fügen Sie vor der Prüfung in APP_JAVA_OPTS eine Zeile hinzu:

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

Löschen Sie die bereits von Spring Boot/JavaFX erzeugten Parameter --add-opens, --module-path oder --add-modules nicht.

Bearbeiten Sie in Tomcat bin/catalina.sh und fügen Sie nach JVM_OPTS=(...) in run_java() hinzu:

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

Diese Änderung beeinflusst gleichzeitig den Frontend-Betrieb von run.sh sowie den Hintergrund-Start von bin/startup.sh.

5. Windows: Direkte Anpassung des Skripts

Bearbeiten von run.bat in regulären Java- und Spring Boot-Anwendungen, um den Ausgabekatalog zu ändern. Finden Sie die erzeugte Zeile set "JVM_OPTS=..." und fügen Sie vor der Prüfung in APP_JAVA_OPTS hinzu:

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

Bewahren Sie den ursprünglichen Inhalt von JVM_OPTS bei und löschen Sie keine internen Parameter, die für Spring Boot/JavaFX erforderlich sind.

Windows Tomcat im Vordergrund ausführen

Bearbeiten von bin\catalina.bat und fügen Sie nach dem ursprünglichen Inhalt von set "JVM_OPTS=..." hinzu:

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

Dies kann run.bat oder bin\catalina.bat run beeinflussen.

Windows Tomcat im Hintergrund starten

bin\startup.bat verwendet PowerShell, um einen Hintergrundprozess zu erstellen. Die einfachste dauerhafte Anpassung erfolgt durch Einstellung von APP_JAVA_OPTS vor dem Aufruf von catalina.bat:

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

Falls gleichzeitig eine Unterstützung für die Vorder- und Hintergrundumgebung gewünscht ist, ohne zwei separate Skripte warten zu müssen, sollte vorzugsweise über die GUI oder CLI mit --jvm-option ein neues Tomcat-Paket erzeugt werden.

6. Vorübergehende Verwendung von APP_JAVA_OPTS

macOS / Linux

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

Tomcat:

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

Windows CMD

Einstellung in der aktuellen CMD-Sitzung (spätere Befehle erben diese Einstellung; mit set APP_JAVA_OPTS= kann sie wieder aufgehoben werden):

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

Gilt nur im lokalen Scope; nach der Ausführung wird die ursprüngliche Umgebung wiederhergestellt:

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. Parameterreihenfolge und Hinweise

  • Zuerst werden die zur Laufzeit vom Tool erzeugten notwendigen Parameter aufgenommen, anschließend die über die GUI/CLI konfigurierten Parameter, und zuletzt wird APP_JAVA_OPTS hinzugefügt.
  • Werte, die nach bestimmten JVM-Parametern folgen, überschreiben die vorherigen Werte – doch nicht alle Parameter erlauben eine Wiederholung; es sollte vermieden werden, auf die Überwrite-Funktion von wiederholten Parametern zu setzen.
  • APP_JAVA_OPTS wird nach Leerzeichen getrennt, was für komplexe Einzelparameter mit Leerzeichen nicht geeignet ist; für solche Parameter sollten vorzugsweise die GUI, --jvm-option oder eine direkte Bearbeitung des Skriptarrays verwendet werden.
  • Die JVM-Parameter müssen vor der Hauptklasse oder -jar stehen; die Anwendungsparameter werden nach den Befehlen run.sh/run.bat platziert.
  • Nach einer Änderung der Heap-Größe sollte diese in Kombination mit den Speichereinschränkungen des Containers, dem verfügbaren Speicher des Betriebssystems sowie der tatsächlichen Last überprüft werden.
  • Eine Neuverpackung schreibt das Startskript überschreibend ab; manuelle Änderungen werden nicht automatisch integriert.