Java Platform, Standard Editionトラブルシューティング・ガイド
目次      

4.2 ボトルネックの検出

ボトルネックは、アプリケーションごとに異なります。一部のアプリケーションにとって、ボトルネックは、I/Oまたはネットワークの待機、スレッド間の同期、または実際のCPU使用率である場合があります。また、ガベージ・コレクションの回数がボトルネックである場合もあります。複数のボトルネックを持つアプリケーションもあります。

アプリケーションのボトルネックを見つけるための1つの方法として、「イベント」タブを調べます。これは詳細設定タブであり、実行することがいくつかあります。まず、「イベント」タブをクリックし、JFRウィンドウの左側にある「イベント・タイプ」タブを開きます。ここは、調査するイベントを選択する場所です。現時点では、図4-1に示すように、統計情報割当てを除くすべてのJavaアプリケーションのイベントを選択します。

現在、すべての「イベント」タブに、これらのイベントのみが表示されます。次に、図4-2に示すように、「グラフ」タブからJavaアプリケーションのメイン・スレッドを見てください。

「グラフ」タブは、最初は把握するのが困難かもしれません。各行はスレッドであり、各スレッドは複数の行を持つことができます。図4-2の各スレッドは、この記録のために「イベント・タイプ」タブで有効にされたJavaアプリケーションのイベントを表す行を持ちます。選択されたJavaアプリケーションのイベントはすべて、スレッド・ストール・イベントであるという重要なプロパティを持ちます。スレッド・ストールは、スレッドがイベント中にアプリケーションを実行していなかったことを示し、これらはすべて期間イベントです。期間イベントは、アプリケーションが実行されていなかった時間を測定します。

「イベント・タイプ」タブから、各イベントの色を見てください。たとえば、黄色は、Java Monitor Waitイベントを表します。黄色い部分は、スレッドがオブジェクトを待機しているときです。これは多くの場合、スレッドがタスクを待機して、アイドル状態であることを意味します。は、Java Monitor Blockedイベントまたは同期イベントを表します。Javaアプリケーションの重要なスレッドがブロックされた状態で多くの時間を費やしている場合は、アプリケーションの重要なセクションがシングル・スレッドであり、それがボトルネックであることを意味しています。は、ソケット読取りおよびソケット書込みイベントを表します。再び、Javaアプリケーションがソケットを待機している時間が多い場合、主なボトルネックは、ネットワーク内またはアプリケーションが通信する他のマシンにある可能性があります。

図4-2で、は、イベントがない部分を表します。の部分は、スレッドがスリープ中、待機中、ソケットの読取り中ではなく、ブロックもされていないことを意味します。通常、ここはアプリケーション・コードが実行される場所です。Javaアプリケーションの重要なスレッドがアプリケーション・イベントを生成せずに多くの時間を費やしている場合、アプリケーションのボトルネックは、コードの実行に費やした時間、またはCPU自体です。

注意: ほとんどのJavaアプリケーションのイベント・タイプでは、20msより長いイベントのみが記録されます(このしきい値はフライト記録の開始時に変更可能)。要約すると、アプリケーションがファイルへの書込み(一度に一部分のみ)などの短いタスクを多数実行しているか、非常に短時間の同期に時間を費やしているので、領域には記録されたイベントがない可能性があります。

前述の各ボトルネックは、フライト記録内でさらに調査できます。

「イベント」タブには、ガベージ・コレクションが表示されず、ガベージ・コレクションがボトルネックになるかどうかを示しません。ガベージ・コレクションのパフォーマンスについて次のトピックを参照してください。

目次      

Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.