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
| Methoden | Geltungsbereich | Wird beim Neu-Paketieren beibehalten? | Empfohlene Anwendungsfälle |
|---|---|---|---|
| JVM startup options in der GUI | Schreiben aller für diese Generierung erstellten Plattform-Startskripte | Ja, die Aufgabeparameter können bei Verfügbarkeit erneut genutzt werden | Tägliche interaktive Paketierung |
CLI’s --jvm-option | Schreiben aller für diese Generierung erstellten Plattform-Startskripte | Ja, Befehl-/Aufgabenskripte können als Konfigurationsquelle dienen | CI/CD, wiederholbare Veröffentlichung |
Anpassung von run.sh, run.bat oder Tomcat-Skripten | Änderung nur im aktuellen Bereitstellungsverzeichnis | Nein, eine erneute Paketierung überschreibt die Änderungen | Notfallanpassungen oder umgebungsbezogene Anpassungen nach der Bereitstellung |
Umgebungsvariablen APP_JAVA_OPTS | Betroffen sind nur der aktuelle Prozess oder die aktuelle Umgebung | Keine Schreiboperation in Dateien | Temporä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
- 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.
- Finden Sie JVM startup options in Common options.
- Geben Sie pro Zeile einen vollständigen Parameter ein, z. B.:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
- Ü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.

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_OPTShinzugefü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_OPTSwird nach Leerzeichen getrennt, was für komplexe Einzelparameter mit Leerzeichen nicht geeignet ist; für solche Parameter sollten vorzugsweise die GUI,--jvm-optionoder eine direkte Bearbeitung des Skriptarrays verwendet werden.- Die JVM-Parameter müssen vor der Hauptklasse oder
-jarstehen; die Anwendungsparameter werden nach den Befehlenrun.sh/run.batplatziert. - 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.