IBMのWASはJVMやGCをどのように扱っているのか?WebSphereサーバ・チューニング入門(3)(3/4 ページ)

» 2007年08月02日 00時00分 公開
[上野憲一郎日本アイ・ビー・エム]

【1】メモリ管理機能の強化(GC方式の指定方法)

 続いて、WAS 6.1のIBM JVMが採用しているGC方式の調整に用いる“-Xgcpolicy:”の設定について説明をします。

 WAS 6.1のIBM JVMでは、“-Xgcpolicy:”の指定が4種類提供されています。

  1. Throughputの最適化-Xgcpolicy:optthruput、デフォルト設定)
    フラット・ヒープを採用。スループット重視。Parallel Collector(Stop The World)、Parallel Mark、Parallel Sweep
  2. Pause Timeの最適化-Xgcpolicy:optavgpause
    フラット・ヒープを採用。Concurrent Collector(GCポーズタイムを最小化)、Concurrent Mark、Concurrent Sweep
  3. Generational Concurrent-Xgcpolicy:gencon
    分割ヒープを採用。Nursery AreaはParallel Collector(Stop The World)、Copying GC。Tenured AreaはConcurrent Collector、Concurrent Mark、Concurrent Sweep
  4. 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仮想マシンの設定

汎用JVMのパフォーマンス・チューニング・オプション

 次に、IBM JVMだけではない、汎用JVMの主なチューニング・パラメータについて紹介していきます。

ヒープ・サイズの調整

 物理メモリ容量を考慮した設定が必要です。物理メモリ以上の値を指定した場合に、swapが発生して性能に多大な影響を与える危険があります。

  • -Xms
    最小ヒープ・サイズ(WAS管理コンソール上は、初期ヒープ・サイズに指定)
  • -Xmx
    最大ヒープ・サイズ(WAS管理コンソール上は、最大ヒープ・サイズに指定)

Nursery Space(New Area)の調整

 Nursery Spaceの適切なサイズを求めるためには、GCのログを解析し、Scavenge GCの発生頻度およびScavengeにかかった時間を把握し、サイズを調整しながら何回かテストを繰り返す必要があります。

  • スループット重視
    Nurseryサイズを大きく
  • ポーズ時間重視
    Nurseryサイズを小さく
  • -Xmn
    固定のNurseryサイズの指定(WAS管理コンソール上は、汎用JVM引数に指定)
  • -Xmns
    Nurseryサイズの最小値の指定(WAS管理コンソール上は、汎用JVM引数に指定)
  • -Xmnx
    Nurseryサイズの最大値の指定(WAS管理コンソール上は、汎用JVM引数に指定)

Tenured Space(Old Area)の調整

 Tenured Spaceは、アプリケーションのすべてのパーシスタントデータを保持するのに十分な容量が必要です。小さすぎる場合にはGCが多発し、場合によっては、OutOfMemoryエラーが発生します。

  • -Xmo
    固定のTenuredサイズの指定(WAS管理コンソール上は、汎用JVM引数に指定)
  • -Xmos
    Tenuredサイズの最小値の指定(WAS管理コンソール上は、汎用JVM引数に指定)
  • -Xmox
    Tenuredサイズの最大値の指定(WAS管理コンソール上は、汎用JVM引数に指定)
図14 NurseryサイズおよびTenuredサイズ 図14 NurseryサイズおよびTenuredサイズ

Parallel Collectorスレッドの調整

  • -Xgcthreads<n>
    <n>にスレッド数を指定。デフォルト値は、合計プロセッサ数から−1(WAS管理コンソール上は、汎用JVM引数に指定)

Large pageサポートの指定

  • -Xlp
    Large pageサポートを使用する場合に指定。ただし、OSレベルでのLarge pageの設定も併せて調整する必要がある(WAS管理コンソール上は、汎用JVM引数に指定)

 これらオプションの設定において、最適な値を見つけるためには、何回か異なる値を指定しながらテストを繰り返す、という手順を踏む必要があります。

 以下に、GCチューニングを行う際に手助けとなるツールを紹介します。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。