診断ガイド

     前  次    目次     
コンテンツの開始位置

パフォーマンスを安定させるチューニング

JVM が適切にチューニングされていないと、最初は問題なく動作していても、徐々にパフォーマンスの低下や長いレイテンシが起こり始めたり、パフォーマンスが大幅に変動したりします。この節では、時間の経過に応じてパフォーマンスを安定させるために JVM をチューニングする方法について説明します。以下の事柄を説明します。

 


パフォーマンスの変動の測定

パフォーマンスの変動を時間の経過に応じて測定および分析できるようにするには、長時間実行して、現在のパフォーマンスを継続して報告するテストが必要です。テスト シナリオは、できる限り現実に即したシナリオにし、できる限り多くのユース ケースを網羅する必要があります。

パフォーマンスの変動を確認したら、この変動が JVM 内のイベント (ガベージ コレクション、断片化、ロックの引き下げなど) に関連しているかどうかを確認するために、Oracle JRockit JVM のモニタを開始することができます。Oracle JRockit Mission Control にあるツール、および冗長出力を使用すると、この作業に役立ちます。冗長出力は -Xverbose コマンドライン オプションを使用して有効化できます。

確認するイベントおよびイベントを探すための適切なツールを表 14-1 に示します。

表 14-1 JVM のイベント
イベント タイプ
確認する対象
ツール
ヒープ サイズの変更
ヒープの増加または減少
-Xverbose:memdbg、JRA、Oracle JRockit Mission Control
ナーサリ サイズの変更
ナーサリ サイズの増加または減少
-Xverbose:memdbg、JRA、Oracle JRockit Mission Control
ガベージ コレクタ方式の変更
動的なガベージ コレクション モードによるガベージ コレクション方式の変更
-Xverbose:memdbg、JRA
断片化の増加
ダーク マターの量の増加
JRA
完全な圧縮
すべてのヒープ パーツの同時圧縮
-Xverbose:memdbg、JRA

 


ヒープ サイズのチューニング

実行時にヒープ サイズが変更されると、パフォーマンスに変動が生じることがあります。ヒープ サイズは、-Xverbose:memdbg 出力および JRockit Mission Control ツールでモニタできます。JRA 記録では、ヒープ サイズが記録中に変更されたかどうかもわかります。

時間の経過と共にパフォーマンスを均等化するには、初期ヒープ サイズ (-Xms) を最大ヒープ サイズ (-Xmx) と同じ値に設定する必要があります。次に例を示します。

java -Xms:1g -Xmx:1g myApplication

ヒープ サイズのチューニングの詳細については、「ヒープ サイズを設定する」を参照してください。

 


ナーサリ サイズの手動でのチューニング

実行時にナーサリ サイズが変更されると、パフォーマンスに変動が生じることがありますが、負荷が変化したときに高いパフォーマンスを維持するためにも役立ちます。ナーサリ サイズは、-Xverbose:memdbg 出力および JRockit Mission Control ツールでモニタできます。JRA 記録では、ナーサリ サイズが記録中に変更されたかどうかもわかります。アプリケーションでのパフォーマンスの変動がナーサリ サイズの変更に関連していることがわかったら、-Xns:<size> コマンドライン オプションを使用して静的なナーサリ サイズを設定できます。次に例を示します。

java -Xns:100m myApplication

ナーサリ サイズのチューニング方法の詳細については、「ナーサリおよび保持領域のサイズを設定する」を参照してください。

注意 : ナーサリ サイズの動的な設定のヒューリスティックをオーバーライドすると、実行中にライブ データの量が変化するアプリケーションでパフォーマンスにマイナスの影響を与えたり、パフォーマンスの変動が発生することがあります。

 


ガベージ コレクタのチューニング

JRockit JVM の動的なガベージ コレクション モードでは、実行時の情報に基づいてガベージ コレクション方式が選択されます。アプリケーションの動作に変更があると、ガベージ コレクション方式が変更される場合があります。このような変更が頻繁に発生して、パフォーマンスの変動が起こる場合、動的なガベージ コレクション モードではなく、静的なガベージ コレクション方式を選択できます。静的なガベージ コレクション方式は、コマンド ライン オプション -Xgc:<strategy> で設定します。たとえば、次のように指定します。

java -Xgc:parallel myApplication

静的なガベージ コレクション方式の選択の詳細については、「静的なガベージ コレクション方式を選択する」を参照してください。

 


圧縮のチューニング

マーク アンド スイープ モデル」に示すように、Oracle JRockit JVM は、マーク アンド スイープ ガベージ コレクション モデルを使用します。このガベージ コレクション モデルを使用すると、ヒープの断片化が進行する場合があります。したがって、ヒープの空き領域は多いものの小さくなります。JVM では、断片化を緩和するため、ガベージ コレクションを行うたびにヒープの部分的な圧縮を行います。場合によっては、圧縮の量が十分ではないこともあります。このような場合には断片化が進行するため、ヒープが断片化して完全な圧縮が実行されるまで、ガベージ コレクションがより頻繁に実行されるようになります。完全な圧縮が行われた後は、ガベージ コレクションの頻度が下がりますが、断片化がまた進行するにつれて徐々に頻度が増します。

この動作によって、Java アプリケーションのパフォーマンスが変化することになります。ガベージ コレクションの頻度が増すにつれて、パフォーマンスは低下します。完全な圧縮の実行中は、ガベージ コレクションの休止時間が長くなることがあり、これによってしばらく Java アプリケーション全体が休止状態になります。この後で、パフォーマンスは再び高くなりますが、ガベージ コレクションの頻度がまた増すにつれて、パフォーマンスは低下し始めます。

圧縮率およびガベージ コレクションの頻度は、-Xverbose:memdbg 出力、Management Console および JRA 記録でモニタできます。JRA 記録では、ヒープ上のダーク マター (重度の断片化) の量も示されます。完全な圧縮が行われるまで、ガベージ コレクションが増え続ける場合は、圧縮率を上げる必要があります。圧縮のチューニングの詳細については、「メモリの圧縮のチューニング」を参照してください。

世代別ガベージ コレクタを使用する方法でも、ヒープの断片化を緩和できます。さまざまなガベージ コレクタについては、「ガベージ コレクタの選択とチューニング」を参照してください。


  ページの先頭       前  次