类似HPjmeter的图形工具,用于查看-agentlib:hprof profiling输出

时间:2009-04-01 22:33:47

标签: java profiling hprof

有哪些工具可用于查看内置JVM分析器的输出?例如,我用:

启动我的JVM
-agentlib:hprof=cpu=times,thread=y,cutoff=0,format=a,file=someFile.hprof.txt

以hprof(“JAVA PROFILE 1.0.1”)格式生成输出。

过去我使用HPjmeter成功地以合理的方式查看这些输出文件。但是,无论出于何种原因,使用当前版本的Sun JVM生成的文件都无法加载到当前版本的HPjmeter中:

java.lang.NullPointerException
    at com.hp.jmeter.f.jb.a(Unknown Source)
    at com.hp.jmeter.f.a.a(Unknown Source)
    at com.hp.c.a.j.z.run(Unknown Source)
Exception in thread "HPeprofDataFileReaderThread" java.lang.AssertionError: null pointer exception from loader
    at com.hp.jmeter.f.a.a(Unknown Source)
    at com.hp.c.a.j.z.run(Unknown Source)

(为什么他们会混淆免费产品的字节码?!)

由此产生两个问题:

  1. 有谁知道HPjmeter错误的原因? ( 编辑 :是 - 见下文
  2. 还有哪些其他工具可以读取hprof文件?为什么没有Sun(有)?
  3. 我知道Eclipse TPTP和其他工具可以动态监控JVMTI数据,但我需要一个可以处理生成的hprof文件的解决方案,因为部署的机器只有JRE(不是JDK)龙头安装。

    编辑:一位非常有帮助的HPjmeter开发人员回复了我的question on an HP ITRC forum,表示heap=dump选项需要暂时包含在-agentlib选项中,直到HPjmeter中出现错误是固定的。这些信息使HPjmeter再次可行,但我仍然会问这个问题是否有人知道任何其他工具。

    编辑:自HPjmeter 4.0.00版(2009年5月发布)以来,此错误已得到修复。

4 个答案:

答案 0 :(得分:6)

Your Kit Java Profiler能够读取hprof快照(我不确定是仅用于内存分析还是用于CPU)。它不是免费的,但是迄今为止我用过的最好的java分析器。它以清晰,直观的方式呈现结果,并在大型数据集上表现良好。文档也很不错。

答案 1 :(得分:1)

为了查看和分析hprof=sampleshprof=cpu的输出,我使用了PerfAnal并取得了良好的效果。 GUI有点简洁,但非常有用。

PerfAnal是免费下载的(GPL,最初是 Linux上的Java编程一书中的示例项目)。 看到这篇文章:

http://www.oracle.com/technetwork/articles/javase/perfanal-137231.html

了解更多信息和下载。

通常你可以运行

java -jar PerfAnal.jar hprof.java.txt

您可能需要使用-Xmx来处理大型hprof文件。

答案 2 :(得分:0)

我不是100%确定它会起作用(听起来会如此)而且我不确定它会以你想要的格式显示它......但你有没有想过VisualVM

我相信它会打开生成的文件。

答案 3 :(得分:0)

我一直在使用Eclipse Memory Analyzer成功分析不同的性能问题。首先,按照Eclipse中项目网页中的描述安装该工具。

之后,您可以创建一个知道要分析的jvm的pid的转储文件

jmap -dump:format=b,file=<filename>.hprof <jvm_pid> 

然后只需在eclipse中导入.hprof文件。它有一些自动报告尝试(对我来说,他们通常不工作)指出哪些可能是问题。

修改

回答评论:你是对的,它更像是Java的泄漏查找器。对于性能问题,我使用JRat进行小型项目。它显示了每个方法的时间,调用方法的次数,调用的层次结构等。唯一的问题是据我所知,它不支持.hprof文件。要使用它,您需要执行添加VM参数的程序

-javaagent:<path>/shiftone-jrat.jar

这将生成一个包含该工具捕获的配置文件的目录。然后,执行

 java -jar shiftone-jrat.jar

打开踪迹。即使是一个简单的工具,我认为它可能很有用。