Download PDF
Download page コールグラフ.
コールグラフ
トランザクション スナップショットのコールグラフは、ビジネストランザクションに関与した特定のティアに関するビジネストランザクション処理情報を表示します。 コールグラフにはコールスタックにあるメソッドが表示され、各コールの情報を提供します。
コールグラフから、合計実行時間、ノード名、実行開始時のタイムスタンプ、ビジネス トランザクション インスタンスの一意の識別子など、全体的な情報を知ることができます。コールグラフはパフォーマンス問題の診断や複雑なビジネストランザクションのフローの最適化に役立ちます。
プロセススナップショットのNode.jsエージェントもコールグラフをキャプチャし、インストゥルメント化されたNode.jsノードでのCPUプロセスのインスタンスを示します。詳細については、Node.jsでのイベントループのブロックを参照してください。
コールグラフのタイプ
コールグラフには以下のタイプがあります。
- フルコールグラフは、ビジネストランザクションの呼び出しの完全なコールシーケンスをキャプチャする。この場合、ビジネストランザクションの処理に関与するモニタリング対象のノードそれぞれにコールグラフが存在する。定期的に収集され、診断されるスナップショットは必ずフルコールグラフとなる。
パーシャルコールグラフは、ビジネストランザクション処理のコールシーケンスのサブセットを示し、通常トランザクションが遅延またはエラーと判断された時点からのものとなる。パーシャルコールグラフは、トランザクションスナップショットでそのまま識別される。
コールグラフの表示
コールグラフを表示するには
- コールグラフを表示するビジネストランザクションのダッシュボードを開き、[Transaction Snapshots] タブをクリックする。
- トランザクション スナップショット リストで、スナップショットをダブルクリックする。
- コールグラフを表示するティアの [Drill Down] リンクをクリックする。リンクの横にあるアスタリスクは、トランザクションのこのティアで複数のコールが作成されたことを意味し、ダイアログにドリルダウンの選択肢として表示される。
パネルに、このノードでのビジネストランザクション処理に関与したクラスとメソッドの名前が、コントロールフローが処理された順にメソッド実行シーケンスに表示されます。
各メソッドについて、ソースコードの処理にかかった時間と行番号を確認でき、トランザクションのパフォーマンスに影響しうるコードの場所を特定することができます。
コールグラフパネルには、大きなコールグラフ内を移動するための UI コントロールが含まれています。たとえば、フィルタフィールドを使用して特定のメソッドまたはメソッドのタイプのみを表示させることができます。関心のあるメソッドが見つかったら、ツリーのルートメソッドとして設定でき、その時点以降に発生するコールグラフの一部のみを表示できます。
コールグラフには、データベースクエリやWebサービスコールなど、外部のアプリケーションやサービスをコールするメソッドの終了コールリンクが表示されます。最小時間しきい値を超えない終了コールは表示されない場合があります。
コールグラフのSQLクエリ終了コール
多くの場合、アプリケーションコードはデータベースコールを複数のフェーズで実行します。例:
- SQL クエリを構築し実行します。
- 結果セットを反復します。
例:
stmt = con.createStatement();
# Execute the query
ResultSet rs = stmt.executeQuery(query);
# Iterate through the results
while (rs.next()) {
String PizzaType = rs.getString("PIZZA_TYPE");
float price = rs.getFLoat("PRICE");
}
Java エージェントは、コールグラフ内で結果セットに対する JDBC SQL クエリの実行と繰り返しを別々に表します。
- 実行コールについては、コールグラフにSQLクエリと実行時間が表示されます。[External Call] 列のデータベースリンクから終了コールの詳細にアクセスできます。
- 反復については、反復の回数のカウントと合計時間が表示されます。[External Call] 列の結果セット反復リンクから終了コールの詳細にアクセスできます。
.NETエージェントの場合、コールグラフ内では結果セットに対するADO.NET SQLクエリ実行の終了コールと繰り返しは別々に表示されません。
PythonエージェントとNode.jsエージェントでは、コールに使用されるデータベースドライバに基づいて、反復を別の終了コールとして区別することがあります。
AppDynamics は、すべてのデータベースコールを常に別々の終了コールとして表すわけではありません。そのため、コールグラフに表示される終了コールよりもデータベースコールの回数が多く表示される可能性があります。
SQLコールの最小キャプチャしきい値の時間
クエリと結果セットの反復の両方に、SQLコールの最小キャプチャしきい値時間があり、デフォルトは10ミリ秒となっています。クエリまたは結果セット反復の実行時間がしきい値を超えない場合は、コールグラフに表示されません。これは以下のいずれかの場合に、オペレーションのどの部分が 10 ミリ秒以上かかるかによって、与えられたデータベース反復のコールグラフにおける表示方法が変わることを意味しています。
- クエリのみが表示される(以下の画像のコールアウト1)
- 結果セットの反復のみが表示される(コールアウト2)
- 両方とも表示される(コールアウト3)
リンクをクリックすると、SQL 終了コールまたは結果セット反復の詳細を確認できます。
スナップショットにおけるSQLクエリの最大数
スナップショット内のSQLクエリの最大数は、デフォルトで500に設定されています。Java エージェントでは、想定どおりの SQL クエリがコールグラフに表示されない場合、max-
jdbc-calls-per-snapshot
ノードプロパティの値を増やすことができます。
リクエストルートノード
Node.js、PHP、Python エージェントのトランザクション スナップショットのコールグラフには、{request}
という名前の人為的なルートノードがあります。
PythonとPHPの場合、このノードの目的は、ビジネストランザクションの合計時間と観測されるコールグラフノードの合計時間の差異を調整し、コールグラフの単一のエントリポイントとして機能し、他のノードに帰属しない終了コールを含むことにあります。
Node.js の場合、ビジネストランザクションのコールグラフの {request}
ノード は、トランザクション スナップショットと交差するプロセススナップショットのコールグラフの可用性を伝えます。{request}
ノードがないと、プロセススナップショットは利用できません。詳細については、プロセススナップショットおよびビジネストランザクションスナップショットを参照してください。
Node.jsコールグラフ
Node.jsエージェントが完全なコールグラフをキャプチャすると、トランザクションスナップショットのコールグラフタブの上部に、待機時間などトランザクションの合計実行時間が表示されます。
コールグラフペインに表示される実行時間は、コールグラフ内の各メソッドコールの合計時間です。この値は合計の実行時間よりも少なくなることがありますが、それはコール間の待機時間が含まれないためです。
コールグラフで除外されたクラスの表示
コールグラフのメソッド呼び出しシーケンスには数百のクラスが含まれることがあります。これらのクラスには、ユーザ アプリケーション クラス、フレームワーククラス(Tomcat または WebSphere ランタイムクラスなど)、Java/J2EE コアライブラリ、.NET フレームワーククラスなどが含まれます。
これらのクラスのすべてが、通常行うトラブルシューティングのタイプに関連しているわけではありません。ほとんどの場合、一番の関心対象となるのはフレームワークまたは言語プラットフォームをベースに構築したカスタム アプリケーション クラスです。その他のクラスは必要になることはあっても、稀なケースです。
コールグラフをより読み取りやすくし、非ユーザーアプリケーションクラスのタイミング情報の処理におけるオーバーヘッドを回避するため、その他のクラスはコールグラフで表示されません。
パッケージ(Java)またはネームスペース(.NET)が除外されている場合、[packages/namespaces have been excluded] リンクをクリックして、パッケージを表示することができます。また、任意でコールグラフに含まれるクラスを構成することができます。
インストゥルメンテーションの構成
コールグラフのいずれかのアイテムを右クリックすると、[Configure Instrumentation for this Class/Method] を選択できます。
[Configure Instrumentation] パネルにあるドロップダウンで、そのメソッドに作成する構成のタイプを選択できます。