16.5 Application Serverで指定できるJava HotSpot VMのオプション

ここでは,add.jvm.argに指定できるJava HotSpot VMのオプション,およびオプションを指定する際の注意事項について説明します。

add.jvm.argに指定できるJava HotSpot VMのオプションについて次の表に示します。なお,「VR」とは,パラメタが導入・変更されたアプリケーションサーバのバージョンです。

表16-11 add.jvm.argを指定した場合に指定できるJava HotSpot VMのオプション

オプション名内容指定可能値VR
-D<property>JavaVMのシステムプロパティを指定します。入力は制限されません。05-00
-agentlib:<libname>[=<options>]ネイティブエージェントライブラリ<libname>をロードします。入力は制限されません。08-00
-verbose:<情報種別><情報種別>に指定した情報を出力します。<情報種別>に指定できる値を示します。
class:
クラスがロードされるたびにクラスに関する情報を出力します。
gc:
GCイベントが発生するたびに報告します。
jni:
ネイティブメソッドの使用およびそのほかのJava Native Interface(JNI)アクティビティに関する情報を報告します。
指定できる文字列を次に示します。
  • class
  • gc
  • jni
05-00
-Xloggc:<ファイル>-verbose:gcと同様にGCイベントが発生するたびに報告しますが,そのデータを<ファイル>に記録します。-verbose:gcを指定したときに報告される情報のほかに,報告される各イベントの先頭に,最初のGCイベントからの経過時間(秒単位)が付け加えられます。入力は制限されません。05-00
-Xms<size>Javaヒープの初期サイズを設定します。自然数の値を次に示す単位を使って指定します。
  • キロ「k」
  • メガ「m」
  • ギガ「g」
  • テラ「t」
なお,大文字・小文字は区別されません。
05-00
-Xmx<size>Javaヒープの最大サイズを設定します。自然数の値を次に示す単位を使って指定します。
  • キロ「k」
  • メガ「m」
  • ギガ「g」
  • テラ「t」
なお,大文字・小文字は区別されません。
05-00
-Xmn<size>New領域の初期値および最大値を設定します。自然数の値を次に示す単位を使って指定します。
  • キロ「k」
  • メガ「m」
  • ギガ「g」
  • テラ「t」
なお,大文字・小文字は区別されません。
05-00
-Xss<size>1スタック領域の最大サイズを設定します。自然数の値を次に示す単位を使って指定します。
  • キロ「k」
  • メガ「m」
  • ギガ「g」
  • テラ「t」
なお,大文字・小文字は区別されません。
05-00
-Xprofこのオプションを指定した場合,実行中のプログラムのプロファイルを生成し,プロファイリングデータを標準出力に出力します。このオプションは,プログラム開発用のユーティリティとして提供されています。本番稼働システムでの使用を目的としたものではありません。05-00
-Xrunhprof[:<suboption>=<value>,...]CPU,ヒープ,またはモニタのプロファイリングを有効にします。-Xrunhprofの後ろにコロン「:」を指定して「<suboption>=<value>」を記述します。「<suboption>=<value>」はコンマ「,」で区切って複数指定できます。
サブオプションとそのデフォルト値のリストを取得するには,コマンドjava-Xrunhprof:helpを実行します。
任意の文字列を指定します。
<suboption>には「=」および「,」は指定できません。
また,<value>には「,」は指定できません。
05-00
-Xrun<libraryName>JVMPI,JVMDIなどのエージェントを含むライブラリと,起動時に渡されるオプションの文字列を指定します。入力は制限されません。05-00
-Xdebug指定した場合,JVMDIのサポートを有効にして開始します。JVMDIは推奨されていません。また,J2SE 5.0でのデバッグには使用されません。したがって,J2SE 5.0でのデバッグには,このオプションは必要ありません。05-00
-XX:NewRatio=<value>New領域に対するTenured領域の割合を指定します。
<value>が2の場合は,New領域とTenured領域の割合が,1:2になります。
「New領域の使用中サイズ≧Tenured領域の空き領域サイズ」になるとFullGCが発生します。このオプションに1を設定すると,FullGCが多発するので注意してください。
自然数の値を指定します。05-00
-XX:MetaspaceSize=<size>Metaspace領域の初期サイズを指定します。自然数の値を次に示す単位を使って指定します。
  • キロ「k」
  • メガ「m」
  • ギガ「g」
  • テラ「t」
なお,大文字・小文字は区別されません。
09-70
-XX:MaxMetaspaceSize=<size>Metaspace領域の最大サイズを指定します。自然数の値を次に示す単位を使って指定します。
  • キロ「k」
  • メガ「m」
  • ギガ「g」
  • テラ「t」
なお,大文字・小文字は区別されません。
09-70
-XX:CompressedClassSpaceSizeCompressed Class Spaceの最大サイズを指定します。自然数の値を次に示す単位を使って指定します。
  • キロ「k」
  • メガ「m」
  • ギガ「g」
なお,大文字・小文字は区別されません。
09-70
-XX:SurvivorRatio=<value>New::Survivor領域のFrom空間とTo空間に対するNew::Eden領域の割合を指定します。
<value>に8を設定した場合は,New::Eden領域,From空間,To空間の割合が,8:1:1になります。
自然数の値を指定します。05-00
-XX:[+|-]PrintTenuringDistribution
-XX:+PrintTenuringDistribution
CopyGC実行時に,Survivor領域のオブジェクトの年齢分布を出力します。
-XX:-PrintTenuringDistribution
CopyGC実行時に,Survivor領域のオブジェクトの年齢分布を出力しません。
指定できる文字を次に示します。
  • プラス「+」
  • マイナス「-」
05-00
-XX:TargetSurvivorRatio=<value>GC実行後のNew::Survivor領域内でJavaオブジェクトが占める割合の目標値(0~100(単位:%))を指定します。自然数の値を指定します。05-00
-XX:MaxTenuringThreshold=<value>CopyGC実行時に,From空間とTo空間でJavaオブジェクトを入れ替える回数のしきい値を指定します。指定した回数を超えて入れ替え対象になったJavaオブジェクトは,Tenured領域に移動されます。
このオプションの有効範囲は,0~デフォルト値です。範囲外の値を指定した場合,しきい値を超えた場合にTenured領域へ移動する機能は無効になります。
自然数の値を指定します。05-00
-XrunhndlwrapJDKのバージョンが5以下の環境でWindowsをログオフしたとき,JavaVMの実行を継続するかどうか設定します。
-XX:+EagerXrunInitを指定した場合,このオプションの指定は無効になります。また,-agentlib:hndlwrap2
を設定した場合,このオプションは設定しないでください。
このオプションは,ほかのJVMTI版プログラムと同時に使用できません。
コマンドプロンプト上でこのオプションを使用したJavaを実行している状態でログオフすると,「プログラムが反応しない」旨のエラーポップアップが表示され,ログオフできません。
05-01
-agentlib:hndlwrap2JDKのバージョンが6の環境でWindowsをログオフしたとき,JavaVMの実行を継続するかどうか設定します。
-Xrunhndlwrapを設定した場合,このオプションは設定しないでください。
このオプションは,ほかのJVMTIプログラムと同時に使用できません。
コマンドプロンプト上でこのオプションを使用したJavaを実行している状態でログオフすると,「プログラムが反応しない」旨のエラーポップアップが表示され,ログオフできません。
08-50
-XX:[+|-]UseSerialGC
-XX:+UseSerialGC
SerialGCを実行します。
-XX:-UseSerialGC
SerialGCを実行しません。
指定できる文字を次に示します。
  • プラス「+」
  • マイナス「-」
08-70
-XX:[+|-]UseG1GC
-XX:+UseG1GC
G1GCを実行します。
-XX:-UseG1GC
G1GCを実行しません。
-XX:+HitachiUseExplicitMemoryオプションとは同時に指定できません。指定した場合,メッセージが標準出力に出力され,JavaVMがリターンコード1で終了します。
指定できる文字を次に示します。
  • プラス「+」
  • マイナス「-」
09-60
-XX:ParallelGCThreadsG1GCのEvacuationを並列実行するスレッドの数を指定します。-XX:+UseG1GCを指定したときに有効になります。なお,このオプションは,デフォルト値で使用することを推奨します。変更する場合は,実際にJavaVMを動作させて測定した値を基に,最適な値を算出してから変更してください。
JavaVM起動時に,このオプションに指定した数のEvacuation処理用のスレッドが作成され,処理が実行されます。
このオプションの指定を省略した場合のデフォルト値は次のとおりです。
  • 実行環境の論理CPU数が8以下の場合は,CPU数になります。
  • 実行環境の論理CPU数が9以上の場合は,「8+(CPU数-8)×(5÷8)」(小数点以下は切り捨て)の値になります。
例えば,4CPUの場合は,「ParallelGCThreads=4」でデフォルト値は4になります。また,72CPUの場合は,「ParallelGCThreads=8+(72-8)×(5÷8)=48」で48になります。
このオプションに0を指定した場合は,デフォルト値が使用されます。
指定時には,次の点に注意してください。
  • このオプションの値を大きくすると,Evacuation用のスレッド数が増え,Evacuationに割り当てられるリソースが増加します。そのため,値を大きくするとスループットが低下する可能性があります。このオプションの値を変更した場合,性能の要件を満たしているか確認をしてください。
  • 実行環境で作成できるスレッド数を超える値を指定した場合は,JavaVM起動時にEvacuation処理用のスレッドの作成に失敗するため,JavaVMを起動できません。
自然数の値を指定します。08-70
-XX:ConcGCThreadsG1GCのConcurrent Markingの処理を並列実行するスレッドの数を指定します。
-XX:+UseG1GCを指定したときに有効になります。なお,このオプションは,デフォルト値で使用することを推奨します。変更する場合は,実際にJavaVMを動作させて測定した値を基に,最適な値を算出してから変更してください。
JavaVM起動時に,このオプションに指定した数のConcurrent Marking処理用のスレッドが作成され,処理が実行されます。
このオプションの指定を省略した場合のデフォルト値は次のとおりです。
  • Max( (ParallelGCThreads + 2)/4 , 1)
Max(A,B)はAとBのうち,大きい値を取ることを意味します。また,ParallelGCThreadsは-XX:ParallelGCThreadsの値を意味します。
このオプションに0を指定した場合はデフォルト値が使用されます。
指定時には次の点に注意して下さい。
  • 実行環境で作成できるスレッド数を超える値を指定した場合は,JavaVM起動時にConcurrent Marking処理用のスレッドの作成に失敗するため,JavaVMを起動できません。
  • Concurrent Marking処理用スレッドのスレッド数はEvacuation処理用のスレッド数を超えて作成することはできません。Evacuation処理用のスレッド数を超えて指定した場合,メッセージが標準出力に出力されJavaVMの起動に失敗します。
自然数の値を指定します。09-60
-XX:MaxGCPauseMillisG1GCのGCによるアプリケーション停止時間の目標時間を[ms]の単位で指定できます。
-XX:+UseG1GCを指定したときに有効になります。
このオプションに0を指定した場合は,メッセージが標準出力に出力されJavaVMの起動に失敗します。
このオプションに100以下の値を指定する場合,ログファイルの非同期出力機能(-XX: +JavaLogAsynchronous)を使用することを推奨します。
自然数の値を指定します。09-60
(凡例)
-:該当なし
注※
-XX:[+|-]UseSerialGCオプションと-XX:[+|-]UseG1GCオプションの指定の組み合わせごとに実行される処理を次に示します。

表16-12 -XX:[+|-]UseSerialGCオプションと-XX:[+|-]UseG1GCオプションの指定の組み合わせごとの処理

-XX:[+|-]UseSerialGCオプションの指定-XX:[+|-]UseG1GCオプションの指定実行される処理
指定なし指定なしSerialGCを実行
-XX:+UseSerialGC-XX:+UseG1GCプロセスの起動に失敗
-XX:+UseSerialGC-XX:-UseG1GCSerialGCを実行(デフォルトと同様)
-XX:-UseSerialGC-XX:-UseG1GC
-XX:-UseSerialGC-XX:+UseG1GCG1GCを実行
注意
  • デバッグまたはプロファイリング用オプションについて
    JavaVMオプションの-Xprofや-Xdebug,JVMTIエージェントのhprofやjdwp(-agentlib:<libname>などで指定)は,プログラムの開発用ユーティリティとして提供されているものです。システムの運用では指定しないようにしてください。
  • GCの指定について
    アプリケーションサーバのGCは,SerialGC(UseSerialGC)とG1GC(UseG1GC)を選択できます。この二つのGCを同時に指定しないようにしてください。同時に指定した場合は,Javaプロセスが起動できません。

ポイント
Java HotSpot VMのオプションのデフォルト値は,サーバごとに参照先が異なります。サーバ,およびアプリケーションごとのJava HotSpot VMのオプションのデフォルト値の参照先を次の表に示します。

表16-13 サーバ,およびアプリケーションごとのJava HotSpot VMのオプションのデフォルト値の参照先

使用するサーバおよびアプリケーション参照先
J2EEサーバ2.3 usrconf.cfg(J2EEサーバ用オプション定義ファイル)
バッチサーバ3.2 usrconf.cfg(バッチサーバ用オプション定義ファイル)
Webコンテナサーバ(互換機能)マニュアル「アプリケーションサーバ 機能解説 互換編」の「3.11.2 usrconf.cfg(Webコンテナサーバ用オプション定義ファイル)」
cjclstartapコマンドで起動するJavaアプリケーション14.2 usrconf.cfg(Javaアプリケーション用オプション定義ファイル)
そのほかのJavaアプリケーション16.4 Application Serverで指定できるJava HotSpot VMのオプションのデフォルト値
なお,Java HotSpot VMのオプションを簡易構築定義ファイルに指定する場合は,「param-name指定値」にadd.jvm.argを指定した場合に指定できる「param-valueの指定内容」にJava HotSpot VMのオプションを指定してください。