Java Mission Control Heap Profile

Aleš picture Aleš · Sep 27, 2013 · Viewed 10.8k times · Source

I am playing with the new Java Mission Control Profiler that is coming with the Java 7u40 and I cannot make it to profile allocation and collect object statistics. No matter what I do, I cannot see any statistics in the Memory -> Object Statistics window.

The following command starts the collection:

jcmd <pid> JFR.start duration=60s settings=profile filename=alloc-prof.jfr

The Java Mission Control documentation does not mention any specific options to enable object profiling. I have tried to create my own profile and set :

  <flag name="heap-statistics-enabled" label="Heap Statistics">true</flag>
  <flag name="allocation-profiling-enabled" label="Allocation Profiling">true</flag>

But still no Object Statistics are collected.

Answer

Kire Haglin picture Kire Haglin · Sep 27, 2013

Use the template manager that is available in Mission Control.

Go to Windows -> Template Manager and import the template and check Heap Statistics and Allocation Profiling, export it. Done!

If you want to edit the jfc-file manually, it can be good to know elements inside the control-element are not read by the JVM, i.e flag-element, They are used by JMC to modify the parameters outside the control element (the one with the control attribute)

A manual edit requires that you modify these:

set java/object_alloc_in_new_TLAB enabled to true

set java/object_alloc_outside_TLAB enabled to true

set vm/gc/detailed/object_count enabled to true

Note, there are two object count events, with object_count_after_gc you will increase GC times. If you pick the one above instead, you will get one additional GC per recording chunk (which is usually sufficient)