高级Java性能分析

4
我们公司目前正在寻找一位Java分析工具。我们得到了Compuware(dyanTrace产品)的报价,该产品能够提供这种CPU分析输出(示例):
(好吧,我不能发布图片,问题的其余部分应该清楚无误)
dyanTrace提供的是特定方法的所有调用列表,并提供有关每个调用花费了多少墙上时间,其中有多少是CPU时间,有多少是等待IO的确切信息。这些(在我看来非常简单的)信息非常重要,也是我们绝对需要的。
现在的问题是......哪个其他分析工具实际上能够提供这种信息?
我尝试过JDK带的VisualVM、YourKit和JProfiler,但我没有找到任何方法来使用它们中的任何一个产生此输出。
总墙上时间和实际CPU时间的测量应该非常容易进行采样,但似乎JProfiler和YourKit只能测量墙上时间或CPU时间,从未同时测量两者。当采样时,VisualVM显示墙和CPU时间,这使它比这两个付费产品更好。
将某个方法的调用分开,并为每个调用单独显示结果(而不是针对调用位置和参数聚合方法的信息)似乎是一项更高级的功能,这些产品似乎都无法胜任。
对于我们来说,这两个功能在分析工具中是必不可少的。如果有人知道提供它们的产品,请告诉我,我将非常感激。
当然,很可能其中一些分析工具具有这些功能,而我没有在有限的时间内找到如何使用它们。

添加图像链接,以便其他人可以进行编辑。 - Thorbjørn Ravn Andersen
这张图片并非必需,但在此附上:http://tinypic.com/r/5mkfn8/5。 - Sethiel
2个回答

1
经过更多的调查,答案非常简单:提到的任何一个性能分析器都不具备我在这个问题中所需的功能 - 不是VisualVM,也不是YourKit和JProfiler。
因此,如果你想获取这种信息,你最好的选择可能是免费的BTrace。结合JMX,它可以测量几乎任何东西。确切地说,您可以访问所有方法调用,包括所有参数,并且可以在Java中编写任何操作。
此外,它还包含非常好的示例,因此您将能够在一小时内理解概念并自定义测量。

1
你选择了BTrace而不是Dynatrace,是因为它是免费的吗?还是你发现它是一个更好的产品,具有更多的功能? - raspacorp

0

虽然 JProfiler 并没有以这种方式显示它,但它有线程状态的概念,并且 CPU 视图在右上角有一个线程状态选择器。 此屏幕录像 显示了切换线程状态的效果。默认情况下,JProfiler 显示“可运行”状态,而不是墙时间(“所有状态”)。


如果在调用跟踪器中(因此针对每个调用单独应用)可以应用此状态选择器,那将非常好。否则,它就不符合我提到的第二个功能。 - Sethiel
你是指调用跟踪器还是调用树?调用跟踪器是一个多线程调试工具,我不确定线程状态是否适合在那里。在调用树中,我们计划在“所有状态”视图中显示所有线程状态的细分,但目前还不可能。 - Ingo Kegel
我的意思是调用跟踪器。因为,正如我在问题中所写的那样,我绝对需要看到每个方法调用的此信息。而且我认为只有JProfiler的调用跟踪器才能做到这一点。 - Sethiel
调用跟踪器会产生大量信息。它在您有明确定位的问题的有限情况下非常有用。我不确定线程状态分布在这个角度上是否真的能增加很多见解。任何性能分析都是在调用树、热点和调用图视图中完成的——那里我们会添加线程状态信息。 - Ingo Kegel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接