A JVM monitoring tool also know as a Diagnostic might be needed to fine tune your Java application for performance, reduce memory footprint, avoid contention/deadlocking etc. As such selecting a right tool is very important. There are a number of commercial and open source software available today. We would try to see the features and benefits such tool should provide, helping to narrow down the choices.
Benefits of Diagnostic Tool
- Optimize application performance.
- Improve application stability and uptime.
- Reduce system resource usage.
- Reduce the time to resolve problems.
- Drive down development and maintenance costs.
Issues that Diagnostic Tool can solve
- Identify if native or heap memory is leaking.
- Discover which methods are taking most time to run.
- Pin down I/O bottlenecks.
- Visualize and tune garbage collection.
- View any lock contentions.
Features of Diagnostic Tool
The tool should have very low overhead monitoring impact. It should be able to run alongside Java application with a very small impact on the application’s performance.This is very most of the tools fails, instead of monitoring silently they would take act as hog and eat away memory and consume lot of CPU cycles.
The tool should monitor several application areas, using the information to provide recommendations and analysis that help you improve the performance and efficiency of your application. Data obtained from monitoring an application should be available for analysis at a later date.
The diagnostic tool should provide visibility, monitoring and profiling in the following application areas:
Java method profiling:
The tool should provide method profiling to diagnose applications showing high CPU usage. It’s low overhead which means there is no need to specify in advance which parts of the application to monitor, It works without recompilation or byte code instrumentation and shows where the application is spending its time, by giving full call stack information for all sampled methods.
Synchronization can be a big performance bottleneck on multi-CPU systems. It is often difficult to identify a hot lock or assess the impact locking is having on your application. The tool should look for all locking activity and identifies the objects with most contention.
The performance of Garbage Collection (GC) affects the entire application. Tuning GC correctly can potentially deliver significant performance gains. The tool should identify where garbage collection is causing performance problems and suggests more appropriate command line options.
The tool should be able provide insight into size, time and code
location of an object allocations to analyze the memory footprint.
The tool should provide Environment details of the Java version, Java classpath, boot classpath, environment variables, and system properties. This is particularly useful for identifying problems on remote systems or systems where you do not control the configuration.
Java Class loading
The tool should provides class loading information, showing exactly when a class has been loaded and whether it is cached or not. This helps you determine whether your application is being affected by excessive class loading.
File input and output
The tool should monitor application input or output (I/O) tasks as they run. Provide details information about how many and which files are open, and to help solve problems such as when the application fails to close files.
The tool should provides all of the above insights about in real time when the JVM is running without impact the overall performance.
Irrespective of that based on past experience the developer should try to test this tool in isolation in a controlled environment.[pb_builder]