Настройка параметров запуска 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

  1. На странице ввода выберите Advanced — customise the options yourself; в режиме «Простой» перейдите к дополнительным параметрам, нажав на Customize… на последней странице.
  2. Найдите JVM startup options в Common options.
  3. Введите один полный параметр на строку, например:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
  1. Проверьте информацию в итоговом резюме параметров, затем выполните процедуру защиты.

Эти параметры автоматически будут записаны в созданные файлы run.sh и run.bat; файл run.command для macOS перенаправляет на run.sh, поэтому используются те же параметры. Параметры Tomcat также попадают в пути запуска bin/catalina.sh и bin/catalina.bat. Функция Library Encryption создает только архив, а не скрипты запуска, поэтому такая настройка не предусмотрена.

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

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.
  • После изменения размера памяти кучи необходимо провести «проверка совместимости» с ограничениями памяти контейнера, доступной памятью операционной системы и фактической нагрузкой.
  • Повторная сборка приведёт к перезаписи скрипта запуска, в то время как ручные изменения не будут автоматически объединены.