有没有办法在不使用外部工具的情况下分析java应用程序?

时间:2013-02-27 19:20:43

标签: java visualvm

外部工具给我带来麻烦。有没有办法在不使用一些外部gui工具的情况下获得每个函数的简单cpu使用/时间?

我一直在尝试使用VisualVM来编写我的java程序,但是我有可怕的,灵魂破碎,野心致命的结果。它只显示堆使用情况,我感兴趣的是CPU使用率,但该面板只是说这个JVM不支持。顺便说一句,不告诉我使用哪个JVM。我已经下载了JDK 6并使用它启动了它,我确保我的程序针对的是同一个VM,但没有!仍然是相同的,无益的错误消息。 我的需求非常简单。我只想找出该计划花费时间的地方。 Python有一个出色的内置分析器,打印出每个函数花费时间的地方,包括每次调用和总时间格式。这正是我现在正在寻找的程度。有人有什么建议吗?

1 个答案:

答案 0 :(得分:2)

它并不漂亮,但您可以使用内置的hprof分析机制,方法是在命令行中添加一个开关。

-Xrunhprof:cpu=times

有很多选择;有关详细信息,请参阅HPROF的Oracle文档页面。

因此,例如,如果您有一个想要分析的可执行jar,可以输入:

java -Xrunhprof:cpu=times -jar Hello.jar

运行完成后,您将拥有一个名为“java.hprof.txt”的(大)文本文件。

该文件将包含一堆有趣的数据,但您正在寻找的部分是开始的部分:

CPU TIME (ms) BEGIN (total = 500) Wed Feb 27 16:03:18 2013
rank   self  accum   count trace method
   1  8.00%  8.00%    2000 301837 sun.nio.cs.UTF_8$Encoder.encodeArrayLoop
   2  5.40% 13.40%    2000 301863 sun.nio.cs.StreamEncoder.writeBytes
   3  4.20% 17.60%    2000 301844 sun.nio.cs.StreamEncoder.implWrite
   4  3.40% 21.00%    2000 301836 sun.nio.cs.UTF_8.updatePositions

或者,如果你还没有这样做,我会尝试安装VisualVM-Extensions,VisualGC,Threads Inspector,至少安装Swing,JVM,Monitor和Jvmstat Tracer探针。

转到工具 - >插件进行安装。如果您需要更多详细信息,请发表评论,我将进一步扩展此答案。