As part of our consulting activity, we need a tool to help us track performance issues.
A profiler seems to be the perfect suit for this. So I performed a small survey to find the best tool for our needs.
Mainly we are interested in:
- method calls profiling
- threads contentions profiling including with latest java.util.concurrent
- memory snapshot comparison and dynamic memory usage monitoring
Most of available tools are based on instrumentation which might slightly modify performances of your program (known as Heisenbug). For this survey we neglected this impact as main performance issues are still visible when using instrumentation based profiling.
For a more complete description of impacts of instrumentation refer to this discussion.
Here are my remarks regarding some of the main tools available, both commercial and open source.
VisualVM 1.1.1 and Netbeans profiler
- No details on blocked threads.
- History and threads states not useful. (http://profiler.netbeans.org/issues/show_bug.cgi?id=55211)
- No support for java.util.concurrent
Netbeans profiler adds the concept of profiling points and provides integration with source code.
Other concepts are similar.
Yourkit (8.0.13)
- Supports automatic deobfuscation (http://www.yourkit.com/docs/80/help/summary.jsp)
- Keep traces of all exceptions thrown
- No j.u.c support (http://forums.yourkit.com/viewtopic.php?f=2&t=2901). Can be simulated with wall time feature but not easily.
JProfiler (5.2.2)
- Used by our customers.
- Monitor profiling supports java.util.concurrent (reported as blocked threads when waiting).
- Poor documentation.
- No forum.
Appperfect Java Profiler
- Apparently needs a specific agent (only available under Linux?) to profile a remote application.
- Not very clear from documentation.
JRat
- Pretty basic, no dynamic profiling
- Interesting statistics on exception thrown (rates)
dynaTrace
- Apparently demo version not available for France. Didn’t investigate.
JXInsight
- No evaluation version available.
- Didn’t have any answer from sales representative.
So far my tool of choice is JProfiler, mainly because it supports java.util.concurrent features. I would rather switch to Yourkit if this was supported out of the box for the ease of use and exception feature.

 
Interesting post.
I can add that indeed the 2 leading tools I have seen are JProfiler and Yourkit. Other tools have also some features that may vary a lot depending on JVM vendor, version and OS (I’m thinking to Visual VM and his plugin).
As part of our Mule activity we also have a small preference for Yourkit, mostly because of the existing package provided as part of Mule EE.
Julien I cannot seem to see any actually email communication from you. Can you tell me what email account did you use in contacting us? Who was the email addressed to?
Note that we are focused mainly on production environments (including cloud metering) which is not the case for any of the other development profiling tools.
William
Hi William,
I did send an email to sales@jinspired.com on August 17th.
I still am interested with your product and would be very pleased to be able to evaluate it.
Julien
We have no record of an email being received from you on this date. What email account did you use?
We do not respond to non-corporate account email addresses (gmail, yahoo.com,…)
I did use my corporate email. Domain is the same as this blog’s domain.