2013-09-27 29 views
9

我正在玩 Java任务控制配置文件即将与Java 7u40,我不能使它到配置文件分配和收集对象统计。无论我做什么,我都无法在内存 - >对象统计窗口中看到任何统计信息。Java任务控制堆配置文件

下面的命令启动收集:

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

Java Mission Control documentation没有提到任何具体的选项,以使物体轮廓。我试图创建自己的配置文件并设置:

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

但仍然没有收集对象统计信息。

回答

10

使用Mission Control中提供的模板管理器。

转到Windows - >模板管理器,导入模板并检查堆统计和分配分析,导出它。完成!

如果您想手动编辑jfc文件,可以很好地知道控制元素内部的元素不被JVM读取,即flag-element,JMC使用它们来修改参数之外的参数控制元件(具有控制属性)

手动编辑,您需要修改这些:

组Java启用/ object_alloc_in_new_TLAB真

组Java启用/ object_alloc_outside_TLAB真

将vm/gc/detailed/object_count设置为true

请注意,有两个对象计数事件,其中object_count_after_gc会增加GC次数。如果你选择上面的那个,你会得到一个额外的GC每个记录块(这通常是足够的)

+1

谢谢!我将首先尝试导出选项。 –

+0

@ kire-haglin感谢您的详细回复,非常有帮助!是否有更多关于'object_count'和'object_count_after_gc'做什么以及'everyChunk'的时间段是什么意思的文档?也就是说,两者都会导致_additional_ GC,如果是这样,为什么?什么是“录音块”? – Hbf

+1

您可以将记录块视为日志文件。使用_period =“everyChunk”_事件在“日志文件”被旋转时写入。这保证每个录制文件至少有一个这样的事件(由一个或多个录制块组成)。只有_object_count_添加了一个额外的GC。 –