11

有哪些工具可用于查看内置 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 的(有)?

我知道Eclipse TPTP和其他工具可以动态监控 JVMTI 数据,但我需要一个可以在事后处理生成的 hprof 文件的解决方案,因为部署的机器只有一个 JRE(不是 JDK)安装。

编辑:一位非常有帮助的 HPjmeter 开发人员在 HP ITRC 论坛上回答了我的问题,指出heap=dump需要-agentlib暂时包含在选项中,直到 HPjmeter 中的错误得到修复。这些信息使 HPjmeter 再次可行,但我仍然会留下这个问题,看看是否有人知道任何其他工具。

编辑:从 HPjmeter 4.0.00 版(05/2009 可用)开始,此错误已得到修复。

4

4 回答 4

6

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

于 2009-04-02T18:34:53.477 回答
1

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

PerfAnal 是免费下载的(GPL,最初是Java Programming on Linux书中的一个示例项目)。见这篇文章:

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

了解更多信息和下载。

通常你可以运行

java -jar PerfAnal.jar hprof.java.txt

对于大型 hprof 文件,您可能需要使用 -Xmx。

于 2010-10-05T08:51:28.190 回答
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

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

于 2009-04-15T11:49:38.933 回答
0

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

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

于 2009-04-01T23:19:22.967 回答