This chapter provides an overview of JVM Diagnostics. It contains the following sections:
Mission critical Java applications often suffer from availability and performance problems. Developers and IT administrators spend a lot of time diagnosing the root cause of these problems. Many times, the problems occurring in production environments either cannot be reproduced or may take too long to reproduce in other environments. This can cause severe impact on the business.
Oracle Enterprise Manager Cloud Control 12c's JVM Diagnostics enables administrators to diagnose performance problems in Java application in the production environment. By eliminating the need to reproduce problems, it reduces the time required to resolve these problems. This improves application availability and performance. Using JVM Diagnostics, administrators will be able identify the root cause of performance problems in the production environment without having to reproduce them in the test or development environment. It does not require complex instrumentation or restarting of the application to get in-depth application details. Application administrators will be able to identify Java problems or Database issues that are causing application downtime without any detailed application knowledge. The key features of JVM Diagnostics are:
JVM Diagnostics provides in-depth monitoring of Java applications without slowing them down. It helps you to identify the slowest requests, slowest methods, requests waiting on I/O, requests using a lot of CPU cycles, and requests waiting on database calls. It also identifies the end-user requests that have been impacted by resource bottlenecks. Application resources that are causing the performance bottleneck are also visible.
JVM Diagnostics provides immediate visibility into the Java stack. You can monitor thread states and Java method/line numbers in real time and you can proactively identify issues rather than diagnosing issues like application crashes, memory leaks, and application hangs after they occur.
If a particular request is hanging or if the entire application is slow, administrators can perform a real-time transaction trace to view current Java application activity. You can see the offending threads and their execution call stacks. You can also analyze various bottleneck resources such as how much time a thread spent in waiting for a database lock. Complex problems such as activity in one thread (or request) affecting the activity in the other thread or rest of the JVM can be found very quickly.
Sometimes the monitoring interval (default 2 seconds) that is in use is too coarse grained. The Java thread of interest may be too short lived or the amount of monitoring data collected may be insufficient. In such cases, you can run a JVM Trace to get fine-grained details of the JVM activity. This feature allows you to monitor your Java application at a very high frequency (default frequency is once every 200ms) for a short period of time. This allows you to identify interdependency of threads, bottleneck resources (DB, I/O, CPU, Locks, Network) & top methods.
JVM Diagnostics facilitates tracing of Java requests to the associated database sessions and vice-versa enabling rapid resolution of problems that span different tiers. Administrators can drill down from a JVM Thread in a DB Wait State to the associated Oracle database session. Additionally, they can now drill up from the SQL query to the associated JVM and related WebLogic Server targets (this is applicable only if the database and JVM are being monitored by Enterprise Manager).
This feature highlights the slowest SQL queries and helps administrators to tune SQL and the database to improve application performance. This facilitates smooth communication between the database administrators and application administrators by isolating the problems to the database or the application tier.
Memory leaks lead to application slowdowns and eventually cause applications to crash. JVM Diagnostics alerts administrators on abnormalities in Java memory consumption. Administrators can use JVM Diagnostics and take heap dumps in production applications without stopping the application. Additional heap analysis is provided with the Memory Leak Report, and the Anti-Pattern Report. Administrators can take multiple heap dumps over a period of time, analyze the differences between the heap dumps and identify the object causing the memory leak. Heap analysis can be performed even across different application versions. Differential Heap Analysis with multiple heap dumps makes it easy to identify memory leaks.
JVM Diagnostics allows administrators to group sets of JVMs together into JVM pools. This provides the console user with a single view across all related JVMs. Hence all JVM's that make up a single application or a single cluster may be grouped together in an application. This allows administrators to visualize problems naturally and intuitively.
With JVM Diagnostics, you can perform real-time and historical diagnostics on your Java applications. This provides you with detailed insight on the root causes of production problems without having to reproduce the same problem in a Test or QA environment. You can play back transactions interactively from the browser and view the time spent in the network and the server.
Apart from the real-time data, you can also analyze historical data to diagnose problems that occurred in the past. You can view historical data that shows the time taken by end-user requests and the breakdown by Servlet, JSP, EJB, JDBC, and SQL layers.
This section lists some of the new JVM Diagnostics features in Oracle Enterprise Manager Cloud Control 12c:
Automated JVM Diagnostics Engine and Agent Deployment Procedure.
Customer provisioning scripts for deploying the JVM Diagnostics Agent in production environments.
New home pages available for JVM Pool and JVM targets.
Top databases chart added to the JVM and JVM Pool target pages.
Metric Palette for JVMs and JVM Pools is now available and associated with WebLogic Server targets.
JVM Diagnostics integrated with the Middleware Diagnostics Advisor.
Automatic correlation between JVM and WebLogic Server targets.
JVM Diagnostics region is now available in the Business Application, Composite Application and Fusion Application Home pages.
JVM threshold violations are now integrated with the Event subsystem.
Heap snapshots can be taken in HPROF format for external analysis. Heap snapshots can now be imported.
Performance Diagnostics and Live Thread Analysis pages can be directly accessed from the JVM target page.
Bi-directional integration between JVM threads and database sessions through Live Thread Analysis.
Thread State Transition charts and class histograms are now available.
RMI Thread State is now supported.
Wait Time on SQL (DB Wait), Thread Stack Local Objects Browser, Depth and number of locks are now displayed in the Live Thread Analysis page.
Sample analyzer can be accessed from the Thread State Transition Chart.
Windows 64, WLS Virtual Edition, Solaris x86-64 and AIX 64 platforms are now supported.
JVM Diagnostics Engine is now supported for all OMS platforms.
The DB Agent is not required for cross tier correlation if you are using Oracle Database 11gR2 or later versions.
You can drill down to JVM Diagnostics from RUEI and ESS.
Integration between JVM Diagnostics and Coherence, JVM Diagnostics and ECM is now available.
The performance of the JVMTI engine has improved.
Integration with Enterprise Manager Offline Diagnostics feature. You can now take snapshots of diagnostic data, export this data, or import diagnostic data for a particular collection.
JVM targets can now be integrated with JBoss targets.
You can save, compare, edit, and delete class histograms.
emctl jvmd verb can now be used to manage the JVM Diagnostics Engine. See Section 21.12, "Using emctl to Manage the JVM Diagnostics Engine" for details.
The JVM Diagnostics Engine is supported on all platforms on which the Oracle Management Service has been certified.
For the latest certification information, refer to My Oracle Support Note 1415144.1. You can access My Oracle Support at the following URL:
To use JVM Diagnostics, you must have either of the following JVM Diagnostics resource privileges:
JVM Diagnostics User: Allows you to view JVM Diagnostics data.
JVM Diagnostics Administrator: Allows you to manage JVM Diagnostics operations such as creating and analyzing heap and thread snapshots, tracing threads, and so on.
You can define these privileges in the Setup pages. For more details on defining these privileges, see the Enterprise Manager Security chapter in the Enterprise Manager Cloud Control Administrator's Guide.