検索
連載

Webアプリケーションの高速化実験J2EEパフォーマンスチューニング(4)(2/4 ページ)

「アプリケーション・サーバを使いJ2EEべースのWebアプリケーションを構築できたのはいいが、どうも本来のパフォーマンスが出ていない」とは、よく聞く話である。本連載では、そういった事態に遭遇した場合に、具体的にどのように対処してパフォーマンスを向上させるかについて解説していく。(編集局)

PC用表示 関連情報
Share
Tweet
LINE
Hatena

チューニング例1 「Java VMのチューニング」

 Java VMのチューニングポイントには、ヒープサイズとガベージ・コレクション(以下GC)の設定があります。ここでは実際にチューニング・テストを行い適切な設定値を求めてみましょう。

オプション パラメータ名 説明
ヒープサイズのオプション Xms 最小ヒープサイズを設定する
Xmx 最大ヒープサイズを設定する
GCのオプション XX:NewSize New世代領域のヒープサイズを設定する
XX:MaxNewSize New世代領域の最大ヒープサイズを設定する
XX:SurvivorRatio New世代領域のヒープサイズ比率を設定する(通常8に設定)
表3 Java VMのオプション表(Java VMのヒープGCに関する詳しい資料はここを参照)

ヒープサイズを決める

 ヒープサイズがシステムの使用可能な空き物理メモリより大きくならないようにします。ページスワップが頻繁に発生しない程度に設定を行ってください。OSのページングの設定にも影響しますが、使用可能な物理メモリ(OSまたはそのほかのプロセスによって占有されない物理メモリ)の80%が妥当な値と思われます。今回のテストでは、(全体メモリ[512Mbytes] -OS使用のメモリサイズ[128Mbytes])×80%=307Mbytesとなります。また、通常、XmsXmxは同じ値に設定され、ヒープ時の負荷を軽減します。

GC値を決める

 パフォーマンスを向上させるポイントは、キャッシュされたオブジェクトをなるべく再利用するようにアプリケーションを作成することと、New世代領域とOld世代領域の比率を考えながらXX:NewSizeXX:MaxNewSizeの値を設定することです。有効期間の短いオブジェクトが多いほど、XX:NewSizeXX:MaxNewSizeを大きくする必要があります。

チューニング・パラメータ

 今回のチューニング・テストで、XX:NewSizeXX:MaxNewSizeの適正値を求めてみましょう。一般的には、有効期間の短いオブジェクトの数が多いので、GCの設定値は、XX:NewSizeXX:MaxNewSizeの値とも、最大ヒープサイズの1/4程度といわれていますが、構築したアプリケーションが、どの程度の割合で有効期間の短いオブジェクトが存在するかによって変わってきます。

チューニング・テストの実施

 XX:NewSizeXX: MaxNewSizeについて、表4の設定値でアプリケーション・サーバに最大負荷(仮想ユーザー数40個)を10分間かけたときのパフォーマンスを測定しました(そのほかのJava VMパラメータ「java -hotspot -ms358m -mx358m -XX:SurvivorRatio=8 …….」を固定値としています) 。

テスト番号 変更パラメータ(XX:NewSizeとXX:MaxNewSizeの設定値)
1 ヒープサイズの全体(307Mbytes)の約70%、214Mbytesに設定
2 ヒープサイズの全体(307Mbytes)の約60%、184Mbytesに設定
3 ヒープサイズの全体(307Mbytes)の約50%、153Mbytesに設定
4 ヒープサイズの全体(307Mbytes)の約30%、92Mbytesに設定
5 ヒープサイズの全体(307Mbytes)の約25%、76Mbytesに設定
6 ヒープサイズの全体(307Mbytes)の約20%、61Mbytesに設定
7 ヒープサイズの全体(307Mbytes)の約10%、30Mbytesに設定
表4 チューニング・テスト項目表

チューニング・テストの結果

 表5および図9にチューニング・テストの結果を示します。XX:NewSizeXX:MaxNewSizeをヒープサイズ全体の30%から25%に設定したときが最も高いパフォーマンスを得ることができました。

ヒープサイズに占める割合 70% 60% 50% 40% 30% 25% 20% 10%
TPS 60.231 62.001 63.231 72.32 78.234 78.211 77.092 73.212
表5 XX:NewSizeとXX:MaxNewSizeの値の設定を変えたときの秒ごとのトランザクション数(TPS)

図9 XX:NewSizeとXX:MaxNewSizeの値の設定を変えたときの秒ごとのトランザクション数(TPS)
図9 XX:NewSizeとXX:MaxNewSizeの値の設定を変えたときの秒ごとのトランザクション数(TPS)

 図10図11のWebLogic Serverの管理コンソールの「パフォーマンス・モニタ画面」に見られるように、70%に設定したときと20%に設定したときのメモリ使用状況を比べると、New世代領域のGC(Minor GC)とOld世代領域のGC(Major GC)の発生頻度が違います。20%では、圧倒的にMinor GCが発生し(図11のグラフの細かなギザギザ)、70%では、Major GC図10のグラフの大きな山)とMinor GC図10のグラフの中ぐらいの山)の発生頻度が同じくらいです。Major GCMinor GCに比べ処理時の負荷がかかるので、有効期間の短いオブジェクトはMinor GCで処理させるように設定してください。

図10 「パフォーマンス・モニタ画面」70%ときのメモリ使用状況
図10 「パフォーマンス・モニタ画面」70%ときのメモリ使用状況
図11 「パフォーマンス・モニタ画面」20%ときのメモリ使用状況
図11 「パフォーマンス・モニタ画面」20%ときのメモリ使用状況

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る