
第4回 Webアプリケーションの高速化実験
|
チューニング例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となります。また、通常、XmsとXmxは同じ値に設定され、ヒープ時の負荷を軽減します。
|
GC値を決める |
パフォーマンスを向上させるポイントは、キャッシュされたオブジェクトをなるべく再利用するようにアプリケーションを作成することと、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) | ||||||||
![]() |
| 図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 GCはMinor GCに比べ処理時の負荷がかかるので、有効期間の短いオブジェクトはMinor GCで処理させるように設定してください。
![]() |
| 図10 「パフォーマンス・モニタ画面」70%ときのメモリ使用状況 |
![]() |
| 図11 「パフォーマンス・モニタ画面」20%ときのメモリ使用状況 |
| J2EEパフォーマンスチューニング(第4回) | |
| 今回検証する3つのチューニングポイント | |
| チューニング例1 「Java VMのチューニング」 | |
| チューニング例3 「EJB 2.0 Entity-Beans CMPの実装について」 | |
| 連載記事一覧 |
TechTargetジャパン
- 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ - 新キャラ登場!スクラムやるならRedmineとALMinium (2011/12/26)
「黒板を“かんばん”にしてたら先生に怒られた(T_T)」「管理はPC内でやればいいのよ」「承知しました」
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -



