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となります。また、通常、XmsとXmxは同じ値に設定され、ヒープ時の負荷を軽減します。
パフォーマンスを向上させるポイントは、キャッシュされたオブジェクトをなるべく再利用するようにアプリケーションを作成することと、New世代領域とOld世代領域の比率を考えながらXX:NewSize、XX:MaxNewSizeの値を設定することです。有効期間の短いオブジェクトが多いほど、XX:NewSize、XX:MaxNewSizeを大きくする必要があります。
今回のチューニング・テストで、XX:NewSize、XX:MaxNewSizeの適正値を求めてみましょう。一般的には、有効期間の短いオブジェクトの数が多いので、GCの設定値は、XX:NewSize、XX:MaxNewSizeの値とも、最大ヒープサイズの1/4程度といわれていますが、構築したアプリケーションが、どの程度の割合で有効期間の短いオブジェクトが存在するかによって変わってきます。
XX:NewSize、XX: 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:NewSizeとXX: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) |
図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 GCはMinor GCに比べ処理時の負荷がかかるので、有効期間の短いオブジェクトはMinor GCで処理させるように設定してください。
Copyright © ITmedia, Inc. All Rights Reserved.