JVM起動パラメータの設定

Protector4Jでは、パッケージ作成時にJVM起動パラメータを設定したり、デプロイ後に生成された起動スクリプトに一時的に追加したり、直接修正したりすることも可能です。その他の高度なパラメータについてはGUIのProtector4Jの高度なモード設定をご覧ください。

1. 3つの設定方法

方法適用範囲再パッケージ化時に保持されるかどうか推奨される使用用途
GUIのJVM startup options今回生成されたすべてのプラットフォーム起動スクリプトを書き込むはい、タスクパラメータが有効な状態なら再生成可能日常的なインタラクティブパッケージング
CLI用の--jvm-option今回生成されたすべてのプラットフォーム起動スクリプトを書き込むはい、コマンド/タスクスクリプトを設定ソースとして使用できるCI/CD対応、繰り返し配布可能
run.shrun.bat、またはTomcatスクリプトの変更現在のデプロイ先ディレクトリのみを変更します。いいえ、再パッケージングすると上書きされます。デプロイ後の緊急時や環境専用の調整
APP_JAVA_OPTS 環境変数現在のプロセスまたは現在の環境のみに影響します。ファイルには書き込みません。一時的な診断、コンテナ/サービス環境への注入

長期間使用するパラメータはGUIタスクやCLIコマンドに設定し、APP_JAVA_OPTSは一時的な上書き用として使用することを推奨します。生成スクリプトを直接変更した場合は、その変更内容をデプロイ設定に記録し、次回再パッケージング時に再適用する必要があります。

2. GUIで設定します。

  1. 入力ページでAdvanced — customise the options yourselfを選択します。シンプルモードの場合は、最終ページで**Customize…**をクリックして詳細なパラメータに移動します。
  2. Common optionsの中からJVM startup optionsを探します。
  3. 1行につき1つの完全なパラメータを入力します。例:
-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8
-Dspring.profiles.active=prod
  1. 最終的なパラメータの要約を確認した後、保護を実行します。

これらのパラメータは、生成されるrun.shおよびrun.batに自動的に書き込まれます。macOSのrun.commandrun.shに切り替わるため、同じパラメータが使用されます。Tomcatのパラメータは、bin/catalina.shおよびbin/catalina.batの起動パスにも含まれます。Library Encryptionはアーカイブのみを生成し、起動スクリプトは生成しないため、この設定は提供されません。

GUI上のJVM起動オプション

3. CLIで設定します。

各パラメータにつき1回ずつ--jvm-optionを使用し、複数のJVMパラメータを1つの値にまとめないでください。

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で判断する前に1行を追加してください:

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を編集し、run_java()内のJVM_OPTS=(...)の後に行を追加してください:

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に必要な内部パラメータは削除しないこと。

Windows Tomcatのフロントエンド実行

bin\catalina.batを編集し、元のset "JVM_OPTS=..."の後に以下を追加する:

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

これによりrun.batまたはbin\catalina.bat runに影響が出る。

Windows Tomcatのバックグラウンド起動

bin\startup.batはPowerShellを使用してバックグラウンドプロセスを作成する。最も簡単な永続的な変更方法は、catalina.batを呼び出す前にAPP_JAVA_OPTSを設定することである:

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

フロントエンドとバックエンドの両方をサポートしつつ、2つの場所でスクリプトを管理しないようにするには、まずGUIまたはCLIを使用して--jvm-optionを通じてTomcatパッケージを再生成することを推奨します。

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コマンドの後に設定します。
  • ヒープサイズを変更した後は、コンテナのメモリ制限、オペレーティングシステムの利用可能なメモリ、および実際の負荷を考慮して検証する必要があります。
  • 再パッケージングを行うと起動スクリプトが上書きされますが、手動での変更は自動的に反映されません。