Настройка параметров запуска JVM
Protector4J позволяет настраивать параметры запуска JVM во время пакетирования, а также временно добавлять или напрямую изменять генерируемый скрипт запуска после развертывания. Другие продвинутые параметры в GUI смотрите в Настройки режима «Продвинутый» для Protector4J.
1. Три способа настройки
| Способ | Область действия | Остаётся ли при повторном пакетировании | Рекомендуемое применение |
|---|---|---|---|
| JVM startup options в GUI | Запись всех скриптов запуска платформ, сгенерированных на этот раз | Да, генерацию можно повторить, пока параметры задачи доступны | Ежедневная интерактивная упаковка |
--jvm-option в CLI | Запись всех скриптов запуска платформ, сгенерированных на этот раз | Да, скрипты команд/задач могут использоваться в качестве источника конфигурации | CI/CD, возможность многократной публикации |
Изменение run.sh, run.bat или скриптов Tomcat | Изменения применяются только к текущей директории развертывания. | Нет, повторная упаковка перезапишет изменения. | Чрезвычайные корректировки или настройки, специфичные для конкретной среды после развертывания. |
Переменные среды APP_JAVA_OPTS. | Влияние ограничено только текущим процессом или средой. | Данные не записываются в файлы. | Временная диагностика, внедрение в среду контейнеров/сервисов. |
Рекомендуется хранить долгосрочные параметры в задачах GUI или командах CLI, а APP_JAVA_OPTS использовать для временного перезаписывания. После прямой модификации скрипта генерации изменения следует записать в конфигурацию развертывания; их необходимо будет снова применить при следующей упаковке.
2. Настройка в GUI
- На странице ввода выберите Advanced — customise the options yourself; в режиме «Простой» перейдите к дополнительным параметрам, нажав на Customize… на последней странице.
- Найдите JVM startup options в Common options.
- Введите один полный параметр на строку, например:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
- Проверьте информацию в итоговом резюме параметров, затем выполните процедуру защиты.
Эти параметры автоматически будут записаны в созданные файлы run.sh и run.bat; файл run.command для macOS перенаправляет на run.sh, поэтому используются те же параметры. Параметры Tomcat также попадают в пути запуска bin/catalina.sh и bin/catalina.bat. Функция Library Encryption создает только архив, а не скрипты запуска, поэтому такая настройка не предусмотрена.

3. Настройка в CLI
Для каждого параметра используется --jvm-option один раз; не сливайте несколько параметров JVM в одно значение:
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
Единичные параметры, содержащие пробелы или специальные символы, должны цитироваться целиком:
--jvm-option '-Dexample.message=hello world'
Кодировщик будет экранировать значения для шелл-скриптов и скриптов в формате batch в соответствии с границами параметров.
4. macOS / Linux: прямая модификация скрипта
Для обычных приложений на Java и Spring Boot изменяется путь к каталогу вывода run.sh. run.command является лишь переименованием run.sh, поэтому повторные изменения не требуются.
Найдите JVM_OPTS=(...), а также возможные последующие версии JVM_OPTS+=(...), и перед проверкой APP_JAVA_OPTS добавьте новую строку:
JVM_OPTS+=("-Xms512m" "-Xmx2g" "-Dfile.encoding=UTF-8")
if [ -n "${APP_JAVA_OPTS:-}" ]; then
# ...
fi
Не удаляйте уже сгенерированные Spring Boot/JavaFX параметры --add-opens, --module-path или --add-modules.
В Tomcat отредактируйте bin/catalina.sh и добавьте после JVM_OPTS=(...) в run_java():
run_java() {
JVM_OPTS=(...)
JVM_OPTS+=("-Xms1g" "-Xmx2g")
# ...
}
Эта модификация одновременно влияет на работу фронтенда run.sh и запуск бэкенда bin/startup.sh.
5. Windows: прямая модификация скрипта
Для обычных приложений на Java и Spring Boot измените каталог вывода run.bat. Найдите сгенерированную строку set "JVM_OPTS=..." и добавьте её перед строкой 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%"
Сохраните существующий содержимое JVM_OPTS, не удаляя внутренние параметры, необходимые для Spring Boot/JavaFX.
Работа Tomcat в режиме фонового процесса в Windows
Измените bin\catalina.bat, добавив содержимое после существующей строки set "JVM_OPTS=...":
set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"
Это повлияет на run.bat или bin\catalina.bat run.
Запуск Tomcat в фоновом режиме в Windows
bin\startup.bat использует PowerShell для создания фонового процесса. Самый простой способ внести постоянные изменения — это настроить APP_JAVA_OPTS перед вызовом catalina.bat:
@echo off
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
call "%~dp0catalina.bat" start %*
exit /b %ERRORLEVEL%
Если необходима поддержка как фронтенда, так и бэкенда без необходимости управления скриптами в обоих местах, рекомендуется сначала сгенерировать пакет Tomcat с помощью --jvm-option через GUI или CLI.
6. Временное использование APP_JAVA_OPTS
macOS / Linux
APP_JAVA_OPTS="-Xms512m -Xmx2g" ./run.sh
Tomcat:
APP_JAVA_OPTS="-Xms1g -Xmx2g" ./bin/startup.sh
Windows CMD
Настройка в текущей сессии CMD (дальнейшие команды будут наследовать эти настройки; для их сброса используется set APP_JAVA_OPTS=):
set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
run.bat
Действует только в локальной области видимости; после выполнения восстанавливается исходная среда:
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. Порядок параметров и важные замечания
- Сначала указываются параметры, необходимые для работы инструмента, затем — параметры, настроенные через GUI/CLI, а в конце —
APP_JAVA_OPTS. - Значения, указанные после некоторых параметров JVM, могут перезаписать предыдущие значения, но не все параметры позволяют копирование; следует избегать зависимости от перезаписи через копируемые параметры.
APP_JAVA_OPTSразделяется пробелами, поэтому он не подходит для сложных однопараметровых значений, содержащих пробелы; в таких случаях рекомендуется использовать GUI,--jvm-optionили вручную редактировать массивы скриптов.- Параметры JVM должны находиться до основного класса или
-jar; параметры приложения размещаются после командrun.sh/run.bat. - После изменения размера памяти кучи необходимо провести «проверка совместимости» с ограничениями памяти контейнера, доступной памятью операционной системы и фактической нагрузкой.
- Повторная сборка приведёт к перезаписи скрипта запуска, в то время как ручные изменения не будут автоматически объединены.