診断ガイド

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

長いレイテンシ

長いレイテンシは、たとえば、全体のパフォーマンスは良好でも、トランザクション ベースのアプリケーションで 1 つのトランザクションがタイムアウトして表面化することがあります。たいていの場合、不均等なパフォーマンスや確定的でないレイテンシに問題があります。

この章の内容は以下のとおりです。

 


通常はチューニングの問題

長いレイテンシは、多くの場合、休止時間を短く確定的にするようにアプリケーションがチューニングされていないことを示します。時間のかかるトラブルシューティングや緩和対策の作業を行う前に、Oracle JRockit JVM をチューニングして休止時間を短くすることを優先して最適化し、アプリケーションを再起動してください。休止時間の短さを優先して JVM をチューニングする詳細な手順については、「レイテンシを低下させるチューニング」を参照してください。

レイテンシの低下と、アプリケーション スループットの向上は両立しません。トランザクションのタイムアウトを招く高いレイテンシは、多くの場合、ガベージ コレクションによる休止によって発生します。個々のガベージ コレクションを減らすと、Java スレッドの実行中にガベージ コレクションの大半の作業を行う、モーストリ コンカレント モードで実行しているガベージ コレクタが休止します。これにより、ガベージ コレクションのコンカレント フェーズ中の変更を追跡する作業など、ガベージ コレクタに追加の作業が発生します。また、コンカレント ガベージ コレクション中に割り当てられたオブジェクトのガベージ コレクションは次回まで行われないため、ガベージ コレクションの効率は低下します。この結果、JVM は、より頻繁にガベージ コレクションを行うことになります。さらに、圧縮による休止時間を短くするよう圧縮に制限が加えられた場合、ヒープの断片化が進行するおそれもあります。これらはすべて、ガベージ コレクションの休止時間を削減しますが、全体のスループットにはマイナスの影響を与えます。

レイテンシを低く抑える一方で、ガベージ コレクションによる休止時間を長くするか、または「アプリケーションのスループットを向上させるチューニング」で紹介されている方法を使用してガベージ コレクションを手動でチューニングすることによって、全体のスループットを上げることができます。

 


トラブルシューティングのヒント

この節では、-XgcPrio:deterministic-XgcPrio:pausetime-Xgc:gencon-Xgc:singlecon など、モーストリ コンカレント ガベージ コレクションに適用されるレイテンシのトラブルシューティングのヒントを示します。

GC のトリガ値が増え続ける

Java スレッドがガベージ コレクションの全期間を通してオブジェクトの割り当てを続行できるようにするために、コンカレント ガベージ コレクションを開始するとき、ガベージ コレクションのトリガ (gctrigger) 値は、使用できる空きヒープ領域を決定します。コンカレント ガベージ コレクション中にヒープが一杯にならないようにするため、gctrigger 値は実行時に変更されます。-Xverbose:memdbg 出力または JRA 記録で gctrigger 値をモニタしてください。gctrigger 値が増え続ける場合は、コンカレント ガベージ コレクタに対してアプリケーションの負荷が高すぎます。アプリケーションの負荷を減らしてください。

古いコレクションに対する GC の理由が割り当ての失敗である

-Xverbose:memdbg または JRA を使用して、古いコレクションに対するガベージ コレクションの理由をモニタします。古いモーストリ コンカレント コレクションに対するガベージ コレクションの通常の理由は、「ヒープが一杯」であることです。オブジェクトの割り当てに失敗して古いコレクションが頻繁にトリガされる場合は、GC トリガが低すぎます。-XXgcTrigger コマンドライン オプションを使用して GC トリガ値を増やすか、またはアプリケーションの負荷を減らしてください。

若いコレクションの休止時間が長い

-Xverbose:gcpause 出力または JRA 記録で若いコレクションの休止時間をモニタします。若いコレクションの休止時間が長すぎる場合は、-Xns コマンドライン オプションを使用してナーサリ サイズを減らすか、または一世代のガベージ コレクタを実行します。

確定的モードの休止時間が長い

JRA 記録でガベージ コレクションの休止時間をモニタします。長すぎる休止時間の休止時間部分を確認します。Compaction の休止時間部分が長すぎる場合は、目標休止時間を減らします。Mark:Final の休止時間部分 (特に、RefrenceQueues に関する休止時間部分) が長すぎる場合、アプリケーション内の java.lang.ref.Reference オブジェクトが多いことに問題がある場合があります。この問題に対処する最適な方法は、少ない参照オブジェクトを使用する Java アプリケーションに設計し直すことです。また、ヒープ サイズを減らしてみることもできます。それによって、参照オブジェクトを頻繁に処理でき、古いコレクションが行われるたびに処理する参照オブジェクトの量を減らすことができます。

 


問題が解決できない場合の Oracle サポートへの連絡

レイテンシを低下させるチューニング」または「トラブルシューティングのヒント」に示されているどの方法を試しても問題が解決しない場合は、Oracle サポートに連絡する必要があります。Oracle に問題を報告する方法、およびその際に提出する情報については、「Oracle サポートへのトラブル レポートの送付」を参照してください。


  ページの先頭       前  次