続いて、WAS 6.1のIBM JVMが採用しているGC方式の調整に用いる“-Xgcpolicy:”の設定について説明をします。
 WAS 6.1のIBM JVMでは、“-Xgcpolicy:”の指定が4種類提供されています。
- Throughputの最適化(-Xgcpolicy:optthruput、デフォルト設定)
 フラット・ヒープを採用。スループット重視。Parallel Collector(Stop The World)、Parallel Mark、Parallel Sweep
- Pause Timeの最適化(-Xgcpolicy:optavgpause)
 フラット・ヒープを採用。Concurrent Collector(GCポーズタイムを最小化)、Concurrent Mark、Concurrent Sweep
- Generational Concurrent(-Xgcpolicy:gencon)
 分割ヒープを採用。Nursery AreaはParallel Collector(Stop The World)、Copying GC。Tenured AreaはConcurrent Collector、Concurrent Mark、Concurrent Sweep
- Subpool(-Xgcpolicy:subpool)
 フラット・ヒープを採用。スループット重視。Parallel Collector(Stop-the-world)、Parallel Mark、Parallel Sweep。大規模SMP環境用にオブジェクト・アロケーション・アルゴリズムを最適化。AIX、Linux PPC、zSeries、z/OS、i5/OSでのみサポート
  どのオプションを選択するかの目安を以下に記します。
- アプリケーションのスループット重視
 -Xgcpolicy:optthruput
- アプリケーションのレスポンスを重視し、GCによる影響を抑える
 -Xgcpolicy:optavgpause
- アプリケーションが生成するオブジェクトが短命である
 -Xgcpolicy:gencon
- アプリケーションが多量のスレッドを使用し(大規模SMPマシン環境)、多くのオブジェクトをアロケーション
 -Xgcpolicy:subpool
  これらの指定は、WASのJava仮想マシンに対する設定(汎用JVM引数)で行います。
 図13 Java仮想マシンの設定
図13 Java仮想マシンの設定 次に、IBM JVMだけではない、汎用JVMの主なチューニング・パラメータについて紹介していきます。
 物理メモリ容量を考慮した設定が必要です。物理メモリ以上の値を指定した場合に、swapが発生して性能に多大な影響を与える危険があります。
- -Xms
 最小ヒープ・サイズ(WAS管理コンソール上は、初期ヒープ・サイズに指定)
- -Xmx
 最大ヒープ・サイズ(WAS管理コンソール上は、最大ヒープ・サイズに指定)
  Nursery Spaceの適切なサイズを求めるためには、GCのログを解析し、Scavenge GCの発生頻度およびScavengeにかかった時間を把握し、サイズを調整しながら何回かテストを繰り返す必要があります。
- スループット重視
 Nurseryサイズを大きく
- ポーズ時間重視
 Nurseryサイズを小さく
- -Xmn
 固定のNurseryサイズの指定(WAS管理コンソール上は、汎用JVM引数に指定)
- -Xmns
 Nurseryサイズの最小値の指定(WAS管理コンソール上は、汎用JVM引数に指定)
- -Xmnx
 Nurseryサイズの最大値の指定(WAS管理コンソール上は、汎用JVM引数に指定)
  Tenured Spaceは、アプリケーションのすべてのパーシスタントデータを保持するのに十分な容量が必要です。小さすぎる場合にはGCが多発し、場合によっては、OutOfMemoryエラーが発生します。
- -Xmo
 固定のTenuredサイズの指定(WAS管理コンソール上は、汎用JVM引数に指定)
- -Xmos
 Tenuredサイズの最小値の指定(WAS管理コンソール上は、汎用JVM引数に指定)
- -Xmox
 Tenuredサイズの最大値の指定(WAS管理コンソール上は、汎用JVM引数に指定)
  図14 NurseryサイズおよびTenuredサイズ
図14 NurseryサイズおよびTenuredサイズ
- -Xgcthreads<n>
 <n>にスレッド数を指定。デフォルト値は、合計プロセッサ数から−1(WAS管理コンソール上は、汎用JVM引数に指定)
 
- -Xlp
 Large pageサポートを使用する場合に指定。ただし、OSレベルでのLarge pageの設定も併せて調整する必要がある(WAS管理コンソール上は、汎用JVM引数に指定)
  これらオプションの設定において、最適な値を見つけるためには、何回か異なる値を指定しながらテストを繰り返す、という手順を踏む必要があります。
 以下に、GCチューニングを行う際に手助けとなるツールを紹介します。