Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Published by Scroll Versions from space PRMY21 and version 21.4
Sv translation
languageen
Appd tocbox

Related pages:

A call graph in a transaction snapshot shows you business transaction processing information on a particular tier that participated on the business transaction. A call graph lists the methods in a call stack and provides information about each call. 

A call graph can tell you general information such as the total execution time, the node name, the time stamp for the start of execution, and the unique identifier for the business transaction instance. Call graphs help you diagnose performance issues and optimize the flow of a complex business transaction.

Call graphs are also captured by the Node.js agent in process snapshots, which describe an instance of a CPU process on an instrumented Node.js node. See Event Loop Blocking in Node.js.

Call Graph Types

A call graph can be one of these types:

  • Full call graphs capture the entire call sequence for the business transaction invocation. In this case, call graphs exist for each monitored node involved in the processing of the business transaction. Periodically collected and diagnostic snapshots are always full call graphs. 
  • Partial call graphs represent the subset of the call sequence for processing a business transaction, typically from the point at which the transaction has been determined to be slow or have errors. Partial call graphs are identified as such in the transaction snapshot.

View Call Graphs

To view a call graph:

  1. Open the dashboard for the business transaction for which you want to see a call graph and click the Transaction Snapshots tab.
  2. In the transaction snapshot list, double click a snapshot. 
  3. Click the Drill Down link for the tier on which you want to see a call graph. An asterisk next to the link means that multiple calls were made at this tier for the transaction, which a dialog offers as choices to drill down into.   

In the panel, the method execution sequence shows the names of the classes and methods that participated in processing the business transaction on this node, in the order in which the flow of control proceeded. 

For each method, you can see the time spent processing and the line number in the source code, enabling you to pinpoint the location in code that could be affecting the performance of the transaction. 

The call graph panel includes UI controls for navigating large call graphs. For instance, you can use the filter field to have only a particular method or types of methods displayed. When you find a method of interest, you can set it as the root method in the tree to view only the portion of the call graph that occurs from that point forward.

Call Graph

The call graph displays exit call links for methods that make calls to outside applications and services such as database queries and web service calls. Exit calls that do not exceed a minimum time threshold may not be represented.

SQL Query Exit Calls in Call Graphs

Often times application code executes database calls in multiple phases. For example:

  • Construct and execute a SQL query
  • Iterate over the result set

For example:

Code Block
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");
}

The Java Agent represents JDBC SQL query executions and the iterations over the result set separately in the call graph:

  • For the execute call, the call graph shows the SQL query and the execution time. You can access the exit call details via a database link in the External Call column. 
  • For the iteration over the shows a count of the number of iterations and the total time. You can access the exit call details via a result set iteration link in the External Call column.

The .NET Agent does not separate ADO.NET SQL query execution exit calls from iteration over the result set in the call graph.

The Python Agent and the Node.js Agent sometimes separate out iterations as separate exit calls based upon the database driver used to make the call.

Info

AppDynamics does not always represent every database call as a separate exit call. Therefore you may see a greater number of database calls than the number of exit calls in the call graph.

Minimum Capture Threshold Times for SQL Calls

The query and result set iteration are both subject to the minimum capture threshold times for SQL calls, 10 ms by default. If the execution time for a query or result set iteration does not exceed the threshold it does not appear in the call graph. This means a given database interaction may be represented in a call graph in one of three ways depending on which parts of the operation took longer than 10 ms, if any:

  1. Only the query appears (callout 1 in the image below) 
  2. Only the ResultSet iteration appears (callout 2)
  3. Both appear (callout 3)

Capture Threshold Times

Click the link to view more details for the SQL exit call, or the result set iteration. 

Maximum Number of SQL Queries in Snapshots

The maximum number of SQL queries in snapshots is set to 500 by default. For Java Agents, you can increase the value of the max-jdbc-calls-per-snapshot node property if you do not see expected SQL queries in a call graph.

Request Root Node

The call graphs in transaction snapshots of the Node.js, PHP, and Python agents have an artificial root node named {request} .

For Python and PHP, the purpose of this node is to reconcile time differences between the total business transaction time and the sum of the observed call graph nodes, to act as a single entry point for the call graph, and to contain any exit calls which could not be attributed to any other nodes.

For Node.js, the {request} node in a business transaction call graph signals the availability of a process snapshot call graph that intersects with the transaction snapshot. If there is no {request} node, no process snapshot is available. See Process Snapshots and Business Transaction Snapshots.

Node.js Call Graphs

When the Node.js agent captures a complete call graph, the call graph tab of the transaction snapshot displays the total execution total time of the transaction, including wait times, at the top the call graph.

The execution time shown in the call graph pane is the sum of the times of the individual method calls inside the call graph. This value may be less than the total execution time because it does not include wait times between calls.

Display Excluded Classes in Call Graphs

The sequence of method invocations in a call graph may involve hundreds of classes. These classes include user application classes, framework classes (such as Tomcat or Websphere runtime classes), Java/J2EE core libraries, .NET Framework classes, and more. 

Not all of those classes may be relevant to the type of troubleshooting you normally do. In most cases, your primary interests are the custom application classes you have built on top of the framework or language platform. Other classes may be needed, but only on rare occasions.

To make the call graph more readable and to avoid the overhead of processing the timing information for non-user-application classes, other classes are not shown in the call graph.

If packages (Java) or namespaces (.NET) have been excluded, you can click the packages/namespaces have been excluded link to view the packages, and optionally configure the classes to be included in call graphs. 

Configure Instrumentation

You can right-click any item in a call graph and select Configure Instrumentation for this Class/Method.

Configure Instrumentation

The Configure Instrumentation panel presents a drop-down from which you can select the type of configuration that you want to create for the method.

Sv translation
languageja
Appd tocbox

Related pages:

トランザクション スナップショットのコールグラフは、ビジネストランザクションに関与した特定のティアに関するビジネストランザクション処理情報を表示します。 コールグラフにはコールスタックにあるメソッドが表示され、各コールの情報を提供します。 

コールグラフから、合計実行時間、ノード名、実行開始時のタイムスタンプ、ビジネス トランザクション インスタンスの一意の識別子など、全体的な情報を知ることができます。コールグラフはパフォーマンス問題の診断や複雑なビジネストランザクションのフローの最適化に役立ちます。

プロセススナップショットのNode.jsエージェントもコールグラフをキャプチャし、インストゥルメント化されたNode.jsノードでのCPUプロセスのインスタンスを示します。詳細については、Event Loop Blocking in Node.jsを参照してください。

コールグラフのタイプ

コールグラフには以下のタイプがあります。

  • フルコールグラフは、ビジネストランザクションの呼び出しの完全なコールシーケンスをキャプチャする。この場合、ビジネストランザクションの処理に関与するモニタリング対象のノードそれぞれにコールグラフが存在する。定期的に収集され、診断されるスナップショットは必ずフルコールグラフとなる。 
  • パーシャルコールグラフは、ビジネストランザクション処理のコールシーケンスのサブセットを示し、通常トランザクションが遅延またはエラーと判断された時点からのものとなる。パーシャルコールグラフは、トランザクションスナップショットでそのまま識別される。

コールグラフの表示

コールグラフを表示するには

  1. コールグラフを表示するビジネストランザクションのダッシュボードを開き、[Transaction Snapshots] タブをクリックする。
  2. トランザクション スナップショット リストで、スナップショットをダブルクリックする。 
  3. コールグラフを表示するティアの [Drill Down] リンクをクリックする。リンクの横にあるアスタリスクは、トランザクションのこのティアで複数のコールが作成されたことを意味し、ダイアログにドリルダウンの選択肢として表示される。   

ウィンドウに、このノードでのビジネストランザクション処理に関与したクラスとメソッドの名前が、コントロールフローが処理された順にメソッド実行シーケンスに表示されます。 

各メソッドについて、ソースコードの処理にかかった時間と行番号を確認でき、トランザクションのパフォーマンスに影響しうるコードの場所を特定することができます。 

コールグラフウィンドウには、大きなコールグラフ内を移動するためのUIコントロールが含まれています。たとえば、フィルタフィールドを使用して特定のメソッドまたはメソッドのタイプのみを表示させることができます。関心のあるメソッドが見つかったら、ツリーのルートメソッドとして設定でき、その時点以降に発生するコールグラフの一部のみを表示できます。

コールグラフには、データベースクエリやWebサービスコールなど、外部のアプリケーションやサービスをコールするメソッドの終了コールリンクが表示されます。最小時間しきい値を超えない終了コールは表示されない場合があります。

コールグラフのSQLクエリ終了コール

多くの場合、アプリケーションコードはデータベースコールを複数のフェーズで実行します。例:

  • SQL クエリを構築し実行します。
  • 結果セットを反復します。

例:

Code Block
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エージェントでは、コールに使用されるデータベースドライバに基づいて、反復を別の終了コールとして区別することがあります。

Info

AppDynamicsは、すべてのデータベースコールを別々の終了コールとして表すわけではありません。そのため、コールグラフに表示される終了コールよりもデータベースコールの回数が多く表示される可能性があります。


SQLコールの最小キャプチャしきい値の時間

クエリと結果セットの反復の両方に、SQLコールの最小キャプチャしきい値時間があり、デフォルトは10ミリ秒となっています。クエリまたは結果セット反復の実行時間がしきい値を超えない場合は、コールグラフに表示されません。これは以下のいずれかの場合に、オペレーションのどの部分が10ミリ秒以上かかるかによって、与えられたデータベース反復のコールグラフにおける表示方法が変わることを意味しています。

  1. クエリのみが表示される(以下の画像のコールアウト1)
  2. 結果セットの反復のみが表示される(コールアウト2)
  3. 両方とも表示される(コールアウト3)

リンクをクリックすると、SQL 終了コールまたは結果セット反復の詳細を確認できます。 

スナップショットにおけるSQLクエリの最大数

スナップショット内のSQLクエリの最大数は、デフォルトで500に設定されています。Java エージェントでは、想定どおりの SQL クエリがコールグラフに表示されない場合、max-jdbc-calls-per-snapshot ノードプロパティの値を増やすことができます。

リクエストルートノード

Node.js、PHP、Python エージェントのトランザクション スナップショットのコールグラフには、{request} という名前の人為的なルートノードがあります。

PythonとPHPの場合、このノードの目的は、ビジネストランザクションの合計時間と観測されるコールグラフノードの合計時間の差異を調整し、コールグラフの単一のエントリポイントとして機能し、他のノードに帰属しない終了コールを含むことにあります。

Node.js の場合、ビジネストランザクションのコールグラフの {request} ノード は、トランザクション スナップショットと交差するプロセススナップショットのコールグラフの可用性を伝えます。{request} ノードがないと、プロセススナップショットは利用できません。詳細については、「Process Snapshots and Business Transaction Snapshots」を参照してください。

Node.jsコールグラフ

Node.jsエージェントが完全なコールグラフをキャプチャすると、トランザクションスナップショットのコールグラフタブの上部に、待機時間などトランザクションの合計実行時間が表示されます。

コールグラフペインに表示される実行時間は、コールグラフ内の各メソッドコールの合計時間です。この値は合計の実行時間よりも少なくなることがありますが、それはコール間の待機時間が含まれないためです。

コールグラフで除外されたクラスの表示

コールグラフのメソッド呼び出しシーケンスには数百のクラスが含まれることがあります。これらのクラスには、ユーザ アプリケーション クラス、フレームワーククラス(Tomcat または WebSphere ランタイムクラスなど)、Java/J2EE コアライブラリ、.NET フレームワーククラスなどが含まれます。 

これらのクラスのすべてが、通常行うトラブルシューティングのタイプに関連しているわけではありません。ほとんどの場合、一番の関心対象となるのはフレームワークまたは言語プラットフォームをベースに構築したカスタム アプリケーション クラスです。その他のクラスは必要になることはあっても、稀なケースです。

コールグラフをより読み取りやすくし、非ユーザーアプリケーションクラスのタイミング情報の処理におけるオーバーヘッドを回避するため、その他のクラスはコールグラフで表示されません。

パッケージ(Java)またはネームスペース(.NET)が除外されている場合、[packages/namespaces have been excluded] リンクをクリックして、パッケージを表示することができます。また、任意でコールグラフに含まれるクラスを構成することができます。 

インストゥルメンテーションの構成

コールグラフのいずれかのアイテムを右クリックすると、[Configure Instrumentation for this Class/Method] を選択できます。

Configure Instrumentationウィンドウにあるドロップダウンメニューで、そのメソッドに作成する構成のタイプを選択できます。