Параметры запуска JVM

Protector4J позволяет задать параметры запуска JVM при сборке, временно добавить их после развёртывания или напрямую отредактировать созданные сценарии запуска. Остальные расширенные параметры графического интерфейса описаны в разделе Настройки расширенного режима Protector4J.

1. Четыре способа их задать

СпособОбласть действияПереживает пересборкуДля чего лучше подходит
Параметры запуска JVM в графическом интерфейсеСценарии запуска, созданные в этот раз для всех платформДа, пока у вас есть настройки заданияПовседневная сборка вручную
--jvm-option в командной строкеСценарии запуска, созданные в этот раз для всех платформДа; источником служит команда или файл заданияCI/CD и воспроизводимые сборки
Правка run.sh, run.bat или сценариев TomcatТолько тот развёрнутый каталог, который вы изменилиНет, пересборка затирает правкиСрочные или специфичные для среды изменения после развёртывания
Переменная окружения APP_JAVA_OPTSТолько текущий процесс или окружениеНа диск ничего не записываетсяРазовая диагностика и подстановка из контейнера или службы

Долгоживущие параметры держите в задании графического интерфейса или в команде, а APP_JAVA_OPTS используйте для разовых замен. Если вы правите созданный сценарий напрямую, запишите изменение в документацию по развёртыванию: после следующей сборки его придётся внести заново.

2. Задание в графическом интерфейсе

  1. На странице ввода выберите Расширенный — настройте параметры самостоятельно. Из простого режима расширенные параметры открываются кнопкой Настройка... на итоговой странице.
  2. В разделе Общие параметры найдите Параметры запуска JVM.
  3. Вводите по одному целому параметру в строке, например:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
  1. Проверьте их в итоговой сводке и запустите защиту.

Параметры записываются в созданные run.sh и run.bat. В macOS файл run.command вызывает тот же run.sh, поэтому набор параметров совпадает. Для Tomcat они попадают ещё и в пути запуска bin/catalina.sh и bin/catalina.bat. Шифрование библиотеки создаёт только архив без сценариев запуска, поэтому там поле недоступно.

Параметры запуска JVM в графическом интерфейсе

3. Задание в командной строке

Повторяйте --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'

Упаковщик экранирует каждый параметр отдельно для сценариев оболочки и пакетных файлов, соблюдая эти границы.

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

Не удаляйте параметры --add-opens, --module-path и --add-modules, созданные упаковщиком для Spring Boot или JavaFX.

Для 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 через интерфейс или командную строку.

6. Разовое применение через APP_JAVA_OPTS

macOS и Linux

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

Для Tomcat:

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

CMD в Windows

Задайте переменную для текущего сеанса 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

PowerShell в Windows

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

7. Порядок и оговорки

  • Сначала идут параметры, созданные средством, затем заданные в интерфейсе или командной строке, а APP_JAVA_OPTS добавляется последней.
  • У некоторых параметров JVM более позднее значение перекрывает более раннее, но повторять безопасно можно не всякий параметр — не рассчитывайте на повтор как на способ переопределения.
  • APP_JAVA_OPTS разделяется по пробелам, поэтому не может нести один параметр с пробелами внутри. Для таких случаев используйте интерфейс, --jvm-option или правку массива в сценарии.
  • Параметры JVM ставятся до главного класса или -jar; аргументы приложения — после команды run.sh или run.bat.
  • Изменив размер кучи, сверьте его с ограничением памяти контейнера, доступной памятью хоста и реальной нагрузкой.
  • Пересборка перезаписывает сценарии запуска, и ручные правки автоматически не переносятся.