16 Useful Performance Tools for Java Environments
This is a listing of 16 performance monitoring utilities related to Java and the JVM. Some here are free open source others are commercial and many are very fully featured. Only one comes from Oracle. I shall be doing another post to list the Oracle supplied tools later.
1. FusionReactor – FusionReactor was originally released as a ColdFusion application server monitor. ColdFusion originally ran on Jrun and now runs on Tomcat-Jetty. FusionReactor is very fully featured and is a commercial product which can monitor Java-JVM memory usage, servlet performance and JDBC database connections. It has a very rich GUI and extensive alerting capabilities.
2. Newrelic - Real-time Java application monitoring, which is free to get started with. It features code deployment reports, transaction tracing across different tiers and the ability to create alerts.
3. Datadog – A JMX graphing tool with a free trial but no detail of pricing beyond that.
3. Java Melody – Java Melody is a free and lightweight monitoring tool which does not do any profiling so is safe to use in production environments. It comes with a series of plug-ins including for Grails, Jenkins and Jira.
4. Jamon – Jamon is a powerful free monitoring tool with a great deal of capabilities including the monitoring of SQL queries, servlets and individual method performance. There is also the capability to add listeners which allows us to action events in the application being monitored.
6. Moskito – Moskito is a free open-source Java monitoring tool which is easy to get up and running by dropping the .jar file into the WEB-INF/lib folder or by including a small code section into the web.xml file. There is an included data storage option to keep historical data for later analysis.
7. VisualVM – VisualVM has been around for some time and has active version updates still. As of the publication of this blog piece the latest version was released in July 2014. There are a series of plug-ins that work with Netbeans. If you choose "JVM Comparison" in the list of samples above, you'll be able to see the system properties of all the applications running on the local JVM.
8. Memory Analyzer (MAT) – This is one of a few Oracle supplied utilities and can be used in Eclipse to analyze heap dumps to see the retained size of all objects and also, from that, try to ascertain what is preventing their collection during a Garbage Collection (GC).
9. GCViewer – GCViewer is another free tool which has been around for a while and is an excellent utility for analyzing Garbage Collection (GC) logs providing a dearth of empirical details and graphs which can help greatly in the analysis of GC's.
10. Netbeans Profiler - NetBeans profiler is a module to provide a full featured profiling functionality for the NetBeans IDE. The profiling functions include CPU, memory and threads profiling as well as basic JVM monitoring, allowing developers to be more productive in solving memory or performance-related issues.
11. JProfiler - JProfiler is a commercial utility with extensive reporting capabilities for Java applications and most items needed to run them, including JVM memory behavior, databases via JDBC, JPA and NoSQL, system CPU profiler and thread profiler.
12. The Patty Project - The "Patty" project is aimed at providing a free profiling tool for the Java 1.5.0 and higher Virtual Machines only (depending on backwards compatibility in JVMTI interface). The difference with other profilers is this project maintains a very high emphasis on targeted profiling and allows users to switch profiling features on and off at runtime.
13. JiP – JiP stands for Jave interactive profiler - JIP is a free utility that gathers performance data. You cannot use most profilers to do timings of your application. hprof, for example, will show you the relative amount of time that is spent in different parts of your code, but hprof has so much overhead that you cannot use it to get real world timing measurements. JIP, on the other hand, actually tracks the amount of time used to gather performance data and factors that time out of its analysis. This allows you to get close to real world timings for every class in your code. So there is no need to litter your code withSystem.currentTimeMillis()
14. Profiler4J – Profiler4J is a free open-source tool for profiling in Java. It is enabled by passing an argument at start-up with a path to the Profiler4J .jar file. It comes with several graphs and charts showing a call graph with method details, a call tree, a memory monitor, a class list and thread monitoring.
15. Java-Monitor – Java-Monitor is a commercial tool with a free trial and installation is simple, just involving the dropping in of a WAR file. For example, for Tomcat copy the WAR file into tomcatinstalldirectory/webapps. This tool monitors JVM memory, database connection and servlet performance.
16. SeeFusion – Seefusion also was originally released as a ColdFusion application server monitor. ColdFusion orginally ran on JRun and now runs on Tomcat-Jetty. The install is simple, dropping in a .jar file, a properties file and editing web.xml. It is a commercial product which can monitor, Java-JVM memory usage, servlet performance and JDBC database connections and it has alerting capabilities.