Open Source Profilers in Java
The Java Application Monitor (JAMon) is a free, simple, high performance, thread safe, Java API that allows developers to easily monitor production applications. JAMon can be used to determine application performance bottlenecks, user/application interactions, and application scalability. JAMon gathers summary statistics such as hits, execution times (total, average, minimum, maximum, standard deviation), and simultaneous application requests. JAMon statistics are displayed in the clickable JAMon Report.
NetBeans Profiler is a project to integrate the JFluid profiling technology, which is being developed by Sun, into the NetBeans IDE. The aim of this project is to provide a powerful and flexible profiling solution that is tightly integrated into the IDE workflow. As the size and complexity of Java applications grow, keeping their performance at the required level becomes progressively difficult. That is why we believe profiling should become a natural part of the development work cycle. To achieve that, we would like to make profiling easy-to-use and as unobtrusive as possible – and the JFluid technology that we use, with dynamic bytecode instrumentation at its heart, suits this goal perfectly.
The Cougaar memory profiler is a tool for debugging memory usage and leaks in any Java application. It features a scalable 100% Java design that is lighter weight than existing JVMPI-based profilers.
JMP is a profiler for java that can be used to trace objects usage and method timings. JMP uses the JVMPI interface to gather statistics and interact with the JVM. JMP uses a GTK+ interface to show the status.
Extensible Java Profiler (EJP) is an open-source profiling tool for Java with a scalable and extensible architecture, allowing its usage for exotic programming languages that use a Java backend.
JMemProf is a live Java memory profiler suitable for deployment in web containers such as JBoss, Tomcat and others. JMemProf allows you to retrieve memory profile information while your application is running.
MessAdmin is a notification system and Session administration for J2EE Web Applications, giving detailed statistics and informations on any Web application. It installs as a plug-in to any Java EE WebApp, and requires zero-code modification.
DJProf is an experimental tool for profiling Java programs which employs AspectJ to insert the necessary instrumentation for profiling rather than, for example, the Java Machine Profiler Interface (JVMPI). DJProf can be used to profile Java programs without modification (i.e. there is no need to recompile them for profiling) and does not require the user to have any knowledge of AspectJ.
JIP is a high performance, low overhead profiler that is written entirely in Java. JIP gives the developer the ability to turn the profiler on and off while the VM is running. You can also filter out classes and packages as well as control the output.
JIP is a code profiling tool much like the hprof tool that ships with the JDK. There are, however, a few differences:
- Interactivity. hprof is not an interactive profiler. It starts when your program starts and ends when the JVM exits. In many cases this doesn’t give you a true measure of performance since the Just In Time compiler doesn’t compile code on the first pass. In addition, this type of profiler is not useable at all in web applications since you end up profiling the web container as well as the web application. JIP, on the other hand, allows you to turn the profiler on and off while the JVM is running.
- No native code. Most profilers have some native component. This is because most profilers use the JVMPI (Java Virtual Machine Profiling Interface) which requires the use of native components. JIP, however, is pure Java. It takes advantage of the Java5™ feature which allows you to hook the classloader. JIP adds aspects to every method of every class that you want to profile. These aspects allow it to capture performance data.
- Very low overhead. Most profilers are very slow. In many cases hprof will cause a program to run 20 times slower. JIP, on the other hand, is lightweight. A VM with profiling turned on is about twice as slow as one without a profiler. When the profiler is turned off, there is almost no overhead associated with using JIP.
- Performance Timings. JIP 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 with System.currentTimeMillis()!
- Filters by package/class name. One of the annoying things about hprof is that there is no way to filter out classes by class or package name. JIP allows you to do just that (for more information, look at the profile.properties file). This in not to say that the execution time is not included. It is included but can only be seen in the execution time of the calling routine.
JRat is the Java Runtime Analysis Toolkit. Its purpose is to enable developers to better understand the runtime behavior of their Java programs. The term “behavior” includes, but is not limited to performance profiling.
A JVMPI based profiler for Java that collects all methods calls in a XML File and displays them in a TreeMap.
TomcatProbe is a real-time monitoring and management tool for Apache Tomcat. It is very easy to deploy and requires no modification to either Tomcat or running applications. Tomcatprobe allows real-time monitoring of deployed applications and their status, active http sessions and their attributes, datasources, their details and current usage. It also shows requests that are being executed, sizes of application footprints in memory, enables on-the-fly application deployment with JSP precompilation. System information view displays Java runtime version, graphical memory usage, OS information and system properties. “Quick check” options allows to check usage of all resources including all datasources, file handles and memory in one click.
nfraRED is a tool for monitoring performance of a J2EE application and diagnosing performance problems. InfraRED uses AOP to weave the performance monitoring code into the application. It comes with out of the box support for AspectJ & Aspectwerkz. Salient Features:
- Fully non-intrusive. No coding required by developers.
- Layer-wise performance statistics summary (Web, Session, JDBC etc).
- API level detailed performance statistics.
- Call tree views (like in other profiler tools).
- JDBC API and SQL statistics.
- Last invocation statistics.
- Correlation of statistics across layers.
- Support for centralised gathering and presentation of performance data for one or more applications in a cluster.
- Remote or local collection of performance metrics.
- User-friendly web GUI.
- Simplified ant-based integration with application.
- Support for multiple application servers
- Useful for applications with or without use of EJBs.
- Export summary of performance statistics into Excel spreadsheets.
- Very low overhead, Can be used in production environments.
- Ability to save and reload snapshots.
A simple heap profiler for Java, based on JVMPI. The profiler can be attached to a non-interactive JVM, creating heap statistics from time to time.
A small and fast memory profiler for java/6 and later. TIJjmp uses C code to talk to the jvm and it uses swing to show the the tables of information. So tijmp is written in C (using jvmti and jni) and Java. TIJmp runs in the same jvm as the program being profiled. This means that it can easily get access to all things jvmti/jni has to offer.
Stopwatch is a free, simple, highly extensible, Java API that allows developers to easily monitor whole application or any part of it. By default Stopwatch generate reports about hits, execution times (total, average, minimum, maximum) as well as load but it can be easily extended to measure anything else by providing custom engine. Out of the box Stopwatch uses an in-memory HSQL database. It is able to persist collected data using a “storage”. There is “storage” provided to persist into HSQL database and custom “storage” can be easily integrated.
JIP is a high performance, low overhead code profiler for Java. It’s main features are: 1. It’s written entirely in Java and needs no native components. 2. It allows the developer to filter which classes and packages are profiled. 3. There are many options available for controlling the output of the profiler. This makes it easier to manage all of the data that can be generated. There is also an XML output option which makes it easy to manipluate the output using other programs. 4. JIP is interactive, allowing the developer to turn the profiler on and off while the JVM is running. This makes it particularly well suited for profiling web applications. 5. JIP is available under the BSD license.
Profiler4j is a simple-to-use CPU profiler Java that supports remote profiling and on-the-fly configuration. Its main features are: (1) Based on dynamic bytecode instrumentation. (2) 100% Java. (3) No native library or executable is required. (4) It provides views with call graph, call tree, memory monitor, and class list. (5) Supports fine-grained configuration that can be easily tuned without restarting the profiled JVM. Only the methods you want to profile are instrumented.
Appsy is a “user experience profiling tool” : - Monitor how the users actually uses your java applications, - Monitor how your java applications responds to the users requests. Every software need to be improved in term of quality, performance, efficiency ... With Appspy, you will get all the data you need to learn how to improve the value of your software for your users.
JMeasurement is a free and simple java api for monitoring runtime and usage (count, parallel activation, last activation, deviation...) of user defined points in java production code. It an automatically monitor Interface methodes. There are renderers for text, csv and HTML. It is simple to use and extended.
JBoss Profiler is a log based profiler using the JVMPI system. It uses an agent written in C that captures events from the JVM and logs them to disk. A web application running on JBoss or another machine can be used to analyze these logs through a web browser.