On this page:
JVM/container configuration can often be a root cause for slow performance because not enough resources are available to the application.
AppDynamics helps you identify resource constraints in monitored JVMs.
JVM Key Performance Indicators
There are often thousands of attributes, however, you may not need to know about all of them. By default, AppDynamics monitors the attributes that most clearly represent key performance indicators and provide useful information about short and long term trends. The preconfigured JVM metrics include:
- Total classes loaded and how many are currently loaded
- Thread usage
- Percent CPU process usage
- On a per-node basis:
- Heap usage
- Garbage collection
- Memory pools and caching
- Java object instances
You can configure additional monitoring for:
- Automatic leak detection
- Custom memory structures
Viewing JVM Performance
You can monitor JVM performance information from the node dashboard.
In the left navigation pane, click Servers > App Servers > tier > node. Subtabs of the dashboard take you to pages where you can view various types of JVM performance information.
Memory Usage and Garbage Collection
Monitoring garbage collection and memory usage can help you identify memory leaks or memory thrash that can have a negative impact application performance.
Garbage Collection is a well-known mechanism provided by the Java Virtual Machine to reclaim heap space from unused objects. The process of scanning and deleting objects can affect the performance of the application. Because this can be an issue for applications with large amounts of data, multiple threads, and high transaction rates, AppDynamics captures performance data about the duration of the pauses for garbage collection.
The Garbage Collection panel shows how much time, in milliseconds, it takes to complete both minor and major collections.
Heap usage, garbage collection, and memory pools information appears in the Heap & Garbage Collection subtab of the Memory tab in the node dashboard.
Classes, Garbage Collection, Memory, Threads, and Process CPU Usage Metrics
Information on JVM classes, garbage, threads and process CPU usage is available on the JMX Metrics subtab of the Node Dashboard JMX tab.
To view classes, garbage collection, memory, threads, and process CPU usage metrics, open the JMX tab in the node dashboard.
In the JMX Metrics subtab metric tree, click an item and drag it to the line graph to plot current metric data.
Alert for JVM Health
You can set up health rules based on JVM or JMX metrics. Once you have a health rule, you can create specific policies based on health rule violations. One type of response to a health rule violation is an alert. See Alert and Respond for a discussion of how health rules, alerts, and policies can be used.
You can also create additional persistent JMX metrics from MBean attributes. See Configure JMX Metrics from MBeans.
JVM Crash Guard
Using the Standalone Machine Agent, when a JVM crash occurs on a machine or node, you can be notified almost immediately and take remediation actions. Learning of a JVM crash is very critical because it maybe a sign of a severe runtime problem in an application. JVM Crash is a new event type, implemented as part of JVM Crash Guard, that you can activate to provide you with the critical information you need to expeditiously handle JVM crashes.
Detect Memory Leaks
By monitoring JVM heap utilization and memory pool usage you can identify potential memory leaks. Consistently increasing heap valleys may indicate either an improper heap configuration or a memory leak. You might identify potential memory leaks by analyzing the usage pattern of either the survivor space or the old generation. To troubleshoot memory leaks see Troubleshoot Java Memory Leaks.
Detect Memory Thrash
Memory thrash is caused when a large number of temporary objects are created in very short intervals. Although these objects are temporary and are eventually cleaned up, the garbage collection mechanism may struggle to keep up with the rate of object creation. This may cause application performance problems. Monitoring the time spent in garbage collection can provide insight into performance issues, including memory thrash. For example, an increase in the number of spikes for major collections either slows down a JVM or indicates potential memory thrash.
The Object Instance Tracking subtab helps you isolate the root cause of possible memory thrash. To troubleshoot memory thrash, see Troubleshoot Java Memory Thrash.
Monitor Long-lived Collections
AppDynamics automatically tracks long lived Java collections (HashMap, ArrayList, and so on) with Automatic Leak Detection. Custom Memory Structures you have configured appear in Custom Memory Structures in the Memory tab for the node dashboard.
AppDynamics provides visibility into:
- Cache access for slow, very slow, and stalled business transactions
- Usage statistics (rolled up to Business Transaction level)
- Keys being accessed
- Deep size of internal cache structures