Configuração de parâmetros de inicialização do JVM

O Protector4J permite configurar os parâmetros de inicialização do JVM durante a compactação, além de permitir adicionar temporariamente ou modificar diretamente o script de inicialização gerado após a implantação. Para outros parâmetros avançados na GUI, consulte Configurações do modo avançado do Protector4J.

1. Três maneiras de configuração

MétodoEscopo de proteçãoSe será mantido após a recompactaçãoUso recomendado
JVM startup options na GUIGravar todos os scripts de inicialização da plataforma gerados desta vezSim, é possível gerar novamente enquanto os parâmetros da tarefa ainda estiverem disponíveisEmpacotamento interativo diário
--jvm-option da CLIGravar todos os scripts de inicialização da plataforma gerados desta vezSim, scripts de comando/tarefa podem ser usados como fonte de configuraçãoCI/CD, publicação repetível
Modificar run.sh, run.bat ou os scripts do TomcatApenas modificar o diretório de deploy atualNão, a reempacotagem irá sobrescreverAjustes de emergência ou específicos do ambiente após o deploy
Variável de ambiente APP_JAVA_OPTSAfeta apenas o processo atual ou o ambiente atualNão gravar em arquivosDiagnóstico temporário, inserção em ambientes de container/serviço

Recomenda-se colocar parâmetros de longo prazo em tarefas GUI ou comandos CLI, usando APP_JAVA_OPTS para substituições temporárias. Após modificar diretamente o script de geração, as alterações devem ser registradas na configuração de deploy; elas precisarão ser reaplicadas na próxima reempacotagem.

2. Configurar na GUI

  1. Selecione Advanced — customise the options yourself na página de entrada; no modo simplificado, clique em Customize… na página final para acessar os parâmetros avançados.
  2. Encontre JVM startup options em Common options.
  3. Insira um parâmetro completo por linha, por exemplo:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
  1. Revise no resumo final dos parâmetros e, em seguida, execute a proteção.

Esses parâmetros serão automaticamente gravados nos arquivos run.sh e run.bat gerados; run.command para macOS redireciona para run.sh, portanto, os mesmos parâmetros são utilizados. Os parâmetros do Tomcat também serão incluídos nos caminhos de inicialização de bin/catalina.sh e bin/catalina.bat. O Library Encryption gera apenas um arquivo compactado, sem criar scripts de inicialização, por isso essa configuração não está disponível.

Opções de inicialização da JVM na GUI

3. Configurar na CLI

Cada parâmetro deve usar --jvm-option uma única vez; não combine vários parâmetros do JVM em um único valor:

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

Parâmetros individuais com espaços ou caracteres especiais devem ser citados integralmente:

--jvm-option '-Dexample.message=hello world'

O codificador irá escapar os scripts shell e batch separadamente, de acordo com os limites dos parâmetros.

4. macOS / Linux: modifique o script diretamente

O run.sh, que é usado para editar o diretório de saída em aplicações Java e Spring Boot comuns, funciona da mesma forma. O run.command é apenas uma versão alternativa do run.sh, portanto não é necessário realizar alterações repetidas.

Encontre JVM_OPTS=(...) e quaisquer JVM_OPTS+=(...) que possam existir posteriormente, e adicione uma linha antes de avaliar APP_JAVA_OPTS:

JVM_OPTS+=("-Xms512m" "-Xmx2g" "-Dfile.encoding=UTF-8")
if [ -n "${APP_JAVA_OPTS:-}" ]; then
  # ...
fi

Não remova os parâmetros --add-opens, --module-path ou --add-modules já gerados pelo Spring Boot/JavaFX.

Edite o Tomcat bin/catalina.sh e adicione após JVM_OPTS=(...) em run_java():

run_java() {
  JVM_OPTS=(...)
  JVM_OPTS+=("-Xms1g" "-Xmx2g")
  # ...
}

Essa modificação afeta simultaneamente a execução da interface do usuário run.sh e a inicialização do backend bin/startup.sh.

5. Windows: Modifique o script diretamente.

Edite o diretório de saída do run.bat para aplicações comuns de Java e Spring Boot. Encontre a linha gerada set "JVM_OPTS=..." e adicione o seguinte antes da avaliação em 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%"

Mantenha o conteúdo original do JVM_OPTS; não exclua os parâmetros internos necessários para Spring Boot/JavaFX.

Execução em primeiro plano do Windows Tomcat.

Edite o bin\catalina.bat e adicione o seguinte após o conteúdo existente em set "JVM_OPTS=...":

set "JVM_OPTS=%JVM_OPTS% -Xms1g -Xmx2g"

Isso afetará o run.bat ou o bin\catalina.bat run.

Início em segundo plano do Windows Tomcat.

O bin\startup.bat utiliza o PowerShell para criar um processo em segundo plano. A maneira mais simples de fazer alterações permanentes é definir o APP_JAVA_OPTS antes de chamar o catalina.bat:

@echo off
set "APP_JAVA_OPTS=-Xms1g -Xmx2g"
call "%~dp0catalina.bat" start %*
exit /b %ERRORLEVEL%

Se for necessário suportar tanto a interface frontal quanto a posterior sem manter scripts separados em ambos os locais, prefira gerar novamente o pacote Tomcat por meio de --jvm-option, via GUI ou CLI.

6. Use temporariamente APP_JAVA_OPTS.

macOS / Linux

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

Tomcat:

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

Windows CMD

Defina dentro da sessão atual do CMD (comandos futuros continuarão a herdar essas configurações; use set APP_JAVA_OPTS= para removê-las):

set "APP_JAVA_OPTS=-Xms512m -Xmx2g"
run.bat

Tem efeito apenas em escopo local; o ambiente original é restaurado após a execução.

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. Ordem dos parâmetros e observações importantes.

  • Os parâmetros essenciais gerados pela ferramenta vêm primeiro, seguidos pelos parâmetros configurados via GUI/CLI, com APP_JAVA_OPTS sendo adicionado por último.
  • Valores que aparecem após alguns parâmetros JVM substituem os valores anteriores, mas nem todos os parâmetros permitem repetição; evite depender da substituição por parâmetros repetidos.
  • APP_JAVA_OPTS deve ser dividido por espaços, o que não é adequado para parâmetros complexos que contenham espaços; nesses casos, prefira usar a GUI, --jvm-option ou editar diretamente o array de scripts.
  • Os parâmetros do JVM devem estar antes da classe principal ou de -jar; os parâmetros da aplicação devem ser colocados após os comandos run.sh/run.bat.
  • Após alterar o tamanho do heap, é necessário realizar uma verificação de compatibilidade levando em consideração as limitações de memória do contêiner, a memória disponível no sistema operacional e a carga real.
  • A reempacotagem reescreverá o script de inicialização, e alterações feitas manualmente não serão combinadas automaticamente.