JVM-Startoptionen
Protector4J erlaubt es, JVM-Startoptionen beim Paketieren zu setzen, sie nach der Auslieferung vorübergehend zu ergänzen oder die erzeugten Startskripte direkt zu bearbeiten. Die übrigen erweiterten Optionen der GUI beschreibt Protector4J Erweiterte Moduseinstellungen.
1. Vier Wege, sie zu setzen
| Weg | Wirkungsbereich | Übersteht erneutes Paketieren | Am besten geeignet für |
|---|---|---|---|
| JVM-Startoptionen in der GUI | Die in diesem Lauf erzeugten Startskripte aller Plattformen | Ja, solange Sie die Aufgabeneinstellungen noch haben | Tägliches interaktives Paketieren |
--jvm-option auf der Kommandozeile | Die in diesem Lauf erzeugten Startskripte aller Plattformen | Ja, Befehl oder Aufgabendatei sind die maßgebliche Quelle | CI/CD und reproduzierbare Builds |
Bearbeiten von run.sh, run.bat oder den Tomcat-Skripten | Nur das bearbeitete Auslieferungsverzeichnis | Nein, erneutes Paketieren überschreibt es | Dringende oder umgebungsspezifische Änderungen nach der Auslieferung |
Umgebungsvariable APP_JAVA_OPTS | Nur der aktuelle Prozess bzw. die aktuelle Umgebung | Es wird nichts auf die Platte geschrieben | Kurzfristige Diagnose und Einschleusen aus einer Container- oder Dienstumgebung |
Halten Sie dauerhafte Optionen in der GUI-Aufgabe oder im CLI-Befehl fest und nutzen Sie APP_JAVA_OPTS für kurzfristige Überschreibungen. Wenn Sie ein erzeugtes Skript direkt bearbeiten, notieren Sie die Änderung in Ihrer Deployment-Dokumentation — nach dem nächsten Paketieren müssen Sie sie erneut anwenden.
2. In der GUI setzen
- Wählen Sie auf der Eingabeseite Erweitert – Optionen selbst anpassen. Aus dem einfachen Modus heraus gelangen Sie über Anpassen… auf der Abschlussseite zu den erweiterten Optionen.
- Suchen Sie unter Allgemeine Optionen den Eintrag JVM-Startoptionen.
- Tragen Sie eine vollständige Option pro Zeile ein, zum Beispiel:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
- Prüfen Sie sie in der Abschlusszusammenfassung und führen Sie dann den Schutz aus.
Die Optionen werden in die erzeugten run.sh und run.bat geschrieben. Unter macOS ruft run.command dasselbe run.sh auf und verwendet daher dieselben Optionen. Bei Tomcat landen sie zusätzlich auf den Startpfaden in bin/catalina.sh und bin/catalina.bat. Die Bibliotheksverschlüsselung erzeugt nur ein Archiv und keine Startskripte; dort ist das Feld deaktiviert.

3. Auf der Kommandozeile setzen
Wiederholen Sie --jvm-option für jede Option. Packen Sie nicht mehrere JVM-Optionen in einen Wert.
p4j javaapp app.jar dist \
--jvm-option -Xms512m \
--jvm-option -Xmx2g \
--jvm-option -Dfile.encoding=UTF-8
Für Spring Boot:
p4j springboot app.jar dist \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Für Tomcat:
p4j tomcat app.war dist \
--context /app \
--jvm-option -Xms1g \
--jvm-option -Xmx2g
Setzen Sie eine Option, die Leerzeichen oder Sonderzeichen enthält, vollständig in Anführungszeichen:
--jvm-option '-Dexample.message=hello world'
Der Packager maskiert jede Option entlang dieser Grenzen getrennt für Shell- und Batch-Skripte.
4. Skripte unter macOS und Linux bearbeiten
Bearbeiten Sie bei gewöhnlichen Java- und Spring-Boot-Anwendungen run.sh im Ausgabeverzeichnis. run.command delegiert lediglich an run.sh und muss nicht angepasst werden.
Suchen Sie die erzeugte Zeile JVM_OPTS=(...) samt eventueller nachfolgender JVM_OPTS+=(...)-Zeilen und fügen Sie Ihre eigene Zeile vor der Prüfung auf APP_JAVA_OPTS ein.
JVM_OPTS+=("-Xms512m" "-Xmx2g" "-Dfile.encoding=UTF-8")
if [ -n "${APP_JAVA_OPTS:-}" ]; then
# ...
fi
Entfernen Sie nicht die Optionen --add-opens, --module-path oder --add-modules, die der Packager für Spring Boot oder JavaFX erzeugt hat.
Bearbeiten Sie für Tomcat bin/catalina.sh und fügen Sie Ihre Zeile nach JVM_OPTS=(...) innerhalb von run_java() ein.
run_java() {
JVM_OPTS=(...)
JVM_OPTS+=("-Xms1g" "-Xmx2g")
# ...
}
Das gilt sowohl für den Vordergrundbetrieb über run.sh als auch für den Hintergrundstart über bin/startup.sh.
5. Skripte unter Windows bearbeiten
Bearbeiten Sie bei gewöhnlichen Java- und Spring-Boot-Anwendungen run.bat im Ausgabeverzeichnis. Suchen Sie die erzeugte Zeile set "JVM_OPTS=..." und fügen Sie Ihre eigene vor der Prüfung auf APP_JAVA_OPTS ein:
set "JVM_OPTS=%JVM_OPTS% -Xms512m -Xmx2g -Dfile.encoding=UTF-8"
if defined APP_JAVA_OPTS set "JVM_OPTS=%JVM_OPTS% %APP_JAVA_OPTS%"
Behalten Sie den vorhandenen Inhalt von JVM_OPTS bei. Entfernen Sie nicht die internen Optionen, die Spring Boot oder JavaFX benötigen.
Tomcat im Vordergrund unter Windows
Bearbeiten Sie bin\catalina.bat und fügen Sie Ihre Zeile nach dem vorhandenen set "JVM_OPTS=..." ein:
set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"
Das gilt für run.bat und für bin\catalina.bat run.
Tomcat im Hintergrund unter Windows
bin\startup.bat erzeugt den Hintergrundprozess über PowerShell. Am einfachsten ändern Sie es dauerhaft, indem Sie APP_JAVA_OPTS vor dem Aufruf von catalina.bat setzen:
@echo off
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
call "%~dp0catalina.bat" start %*
exit /b %ERRORLEVEL%
Wenn Sie Vorder- und Hintergrund abdecken wollen, ohne zwei Skripte zu pflegen, erzeugen Sie das Tomcat-Paket besser mit --jvm-option über GUI oder CLI neu.
6. APP_JAVA_OPTS für einen einzelnen Lauf
macOS und Linux
APP_JAVA_OPTS="-Xms512m -Xmx2g" ./run.sh
Für Tomcat:
APP_JAVA_OPTS="-Xms1g -Xmx2g" ./bin/startup.sh
Windows CMD
Für die aktuelle CMD-Sitzung setzen. Spätere Befehle erben den Wert; mit set APP_JAVA_OPTS= löschen Sie ihn.
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
run.bat
Lokal halten und die Umgebung anschließend wiederherstellen:
setlocal
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
call run.bat
endlocal
Für 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. Reihenfolge und Hinweise
- Zuerst stehen die vom Werkzeug erzeugten Optionen, dann die in GUI oder CLI gesetzten, und
APP_JAVA_OPTSwird zuletzt angehängt. - Bei manchen JVM-Optionen überschreibt ein späterer Wert einen früheren, doch nicht jede Option lässt sich gefahrlos wiederholen — verlassen Sie sich zum Überschreiben nicht auf Wiederholungen.
APP_JAVA_OPTSwird an Leerzeichen getrennt und kann daher keine einzelne Option mit Leerzeichen transportieren. Nutzen Sie dafür die GUI,--jvm-optionoder die Bearbeitung des Arrays im Skript.- JVM-Optionen gehören vor die Hauptklasse bzw.
-jar; die Argumente der Anwendung stehen hinter dem Aufruf vonrun.shoderrun.bat. - Prüfen Sie geänderte Heap-Größen zusammen mit dem Speicherlimit Ihres Containers, dem verfügbaren Speicher des Hosts und Ihrer tatsächlichen Last.
- Erneutes Paketieren überschreibt die Startskripte; manuelle Änderungen werden nicht automatisch übernommen.