JProfiler帮助文档Download

HPROF 和 PHD 堆快照


HotSpot JVM 和 Android Runtime 都支持 HPROF 格式的堆快照,IBM J9 JVM 以 PHD 格式写入此类快照。PHD 文件不包含垃圾收集器根,因此 JProfiler 将类模拟为根。使用 PHD 文件查找类加载器内存泄漏可能会很困难。

本机堆快照可以在没有分析代理的情况下保存,并且比 JProfiler 堆快照的开销更低,因为它们是在没有通用 API 约束的情况下保存的。另一方面,本机堆快照支持的功能比 JProfiler 堆快照少。例如,分配记录信息不可用,因此您无法查看对象的分配位置。HPROF 和 PHD 快照可以在 JProfiler 中通过会话→打开快照打开,就像打开 JProfiler 快照一样。只有堆遍历器可用,所有其他部分将被灰显。

在实时会话中,您可以通过调用分析→保存 HPROF/PHD 堆快照创建并打开 HPROF/PHD 堆快照。对于离线分析,有一个“创建 HPROF 堆转储”触发器动作。通常与“内存不足异常”触发器一起使用,以便在抛出OutOfMemoryError时保存 HPROF 快照。

这对应于 VM 参数

-XX:+HeapDumpOnOutOfMemoryError

由 HotSpot JVM 支持。

从正在运行的系统中提取 HPROF 堆转储的另一种方法是通过命令行工具jmap,它是 JRE 的一部分。其调用语法

jmap -dump:live,format=b,file=<filename> <PID>

很难记住,并且需要您首先使用jps可执行文件来找出 PID。JProfiler 附带一个交互式命令行可执行文件bin/jpdump,它更加方便。它允许您选择一个进程,可以连接到在 Windows 上作为服务运行的进程,对混合 32 位/64 位 JVM 没有问题,并且自动编号 HPROF 快照文件。使用-help选项执行它以获取更多信息。

在不加载分析代理的情况下拍摄 HPROF 堆快照也在 JProfiler GUI 中得到支持。当附加到进程时,无论是本地还是远程,您始终可以选择仅拍摄 HPROF 堆快照。

HPROF 快照可以包含线程转储。当 HPROF 快照因OutOfMemoryError而保存时,线程转储可能能够传达应用程序在错误发生时处于活动状态的部分。触发错误的线程用一个特殊的图标标记。