AppDynamics Application Intelligence Platform
This topic describes call graphs for code-level diagnostics.
A call graph lists the methods in a call stack and provides information about each call. Call graphs help you diagnose performance issues and optimize the flow of a complex business transaction.
AppDynamics call graphs provide the following information:
In addition you can:
There are two kinds of call graphs: full and partial. Full call graphs capture the entire call sequence and are captured periodically for general monitoring purposes. Partial call graphs capture the call sequence from the point at which the call sequence has been determined to be slow or have errors, and thus may not include the initial steps in the sequence. Because they are not complete, all the calls that you are expecting to see for a transaction, such as exit calls, may not be displayed in a partial call graph.
1. From a dashboard, click the Transaction Snapshots tab.
2. Do one of the following:
2. Select a particular transaction snapshot and click View Transaction Snapshot.
3. Click the Drill Down icon to see the call graph for the snapshot.
By default the originating call graph in a business transaction, generated by the entry point on the entry point tier, displays.
The call graph is displayed when you click on the drill down option on the snapshot. You can filter and search for a particular class name on the call graph. To do this, use the search box available on the left side of the call graph.
You can use call graphs to troubleshoot the problems in the flow map. Drill down into each tier using the Drill Down option. If there is only one invocation, AppDynamics displays the call graph.
When there are multiple invocations for that tier which participated in the transaction, the Action -> Drill Down menu displays a list of all call graphs for the node. Each call graph represents a call into the node. For example, if JVM A makes two remote calls to JVM B, then JVM B will have two call graphs.
Call graphs represent the sequence of execution of code on the application server. Each row represents a method call and the tree represents the execution sequence.
The total time spent in the call graph is displayed on the top left corner of the call graph.
The Time (ms) column in the call graph shows the time spent in each method.
If a method invokes external calls outside of the app server, such as a JDBC query or a Web Service call, there is a link to the call in the call graph, if the exit call lasted longer than the threshold. For example, JDBC/ADO.NET call taking more time than the specified time (in milliseconds), which defaults to 10ms, is captured in the call graph. See min-duration-for-jdbc-call-in-ms in App Agent Node Properties Reference.
The following example shows the details of a JDBC call that include the query, the execution time of the query, the number of times that the application code iterated over the query results (ResultSet Count) and the time in milliseconds that the application code spent iterating over the results (ResultSet Time).
If the detail screen has a Drill Down link, you can get a call graph for the calls downstream from the original call.
The most expensive methods are listed in the Hot Spots section of the transaction snapshot.
The sequence of Java method invocations in a call graph can include hundreds of classes. These classes are categorized as:
Adding all of these classes together in a call graph is counterproductive for troubleshooting. The only mandatory classes required, are the classes from first category- the Application classes. You might require the other classes only in certain situations. To make the call graph more readable and to avoid the overhead of processing the timing information for all the non-application classes, other classes are not shown in the call graph.
A call graph can have a list of packages (Java) or namespaces (.NET) that are not displayed. To access this list, click on the message for "Some packages/namespaces have been excluded from the Call graph" message.
The PHP and Node.js agents do not support call graph exclusion.
You can right-click on any item in a call graph and select Configure Instrumentation for this Class/Method.
The Configure Instrumentation window presents a drop-down menu form which you can select the type of configuration that you want to create for the method.