title: Java application profiling
body: <p>I am looking for a Java code profiler which I can use to profile my application (its a service which runs in backend) on production (so means low over head, and it must not slow down my application). Primarily I want calling tree profiling, that is if a() calls b() and then b() calls c(), then how much time a() b() and c() took, both inclusively and exclusively.</p>
  
  <p>Have seen <code>jvisualvm</code> and <code>jprofiler</code>, but this is not what I am looking for, because I cannot tie my production application to them as it will cause a major performance issue.</p>
  
  <p>Also, I did go through <code>metrics</code> (<a href="https://github.com/dropwizard/metrics" rel="noreferrer">https://github.com/dropwizard/metrics</a>), but it does not give me a functionality to profile the calling tree.</p>
  
  <p><code>Callgrind</code> (<a href="http://valgrind.org/docs/manual/cl-manual.html" rel="noreferrer">http://valgrind.org/docs/manual/cl-manual.html</a>) type library is what I need, as it gives calling tree profiling functionality and advanced options like avoiding calling cycles (recursion). But I am not sure that Callgrind can be used on production as it dumps data when program terminates.</p>
  
  <p>Can anyone suggest good calling tree profiler for java that can be used on production without compromising the performance?</p>