4

我们公司目前正在寻找Java profiler。我们收到了来自 Compuware(dynaTrace 产品)的报价,它能够为 CPU 分析提供这种输出(示例):

(好的,我不能发布图片,剩下的问题应该没有这张图片就清楚了)

dynaTrace 为您提供的是特定方法的所有调用的列表,其中包含有关每次调用花费多少时间、其中多少是 CPU 时间以及等待 IO 的确切信息。这个(在我看来非常简单)信息非常重要,也是我们绝对需要的。

现在,问题是……还有什么其他分析器实际上能够提供这个信息之王?

我尝试了 VisualVM(JDK 附带)、YourKit 和 JProfiler。我没有找到任何方法来产生这个输出。

  • 通过采样测量总挂墙时间和实际 CPU 时间应该非常容易,但 JProfiler 和 YourKit 似乎只能测量挂墙时间或 CPU 时间,而不能同时测量两者。VisualVM 在采样时同时显示墙和 CPU 时间,这将使它比这两种付费产品中的任何一种都好。

  • 分离某个方法的调用并分别显示每个调用的结果(而不是一个方法的聚合信息,而不考虑它被调用的位置和参数)似乎是更高级的功能,而这些产品似乎都没有这个功能。

这两个功能对我们在分析器中是必不可少的。如果有人知道提供他们的产品,请告诉我,我将非常感激。

当然,很可能提到的一些分析器具有这些功能,而我在有限的时间内没有找到如何去做,我不得不研究它们。

4

2 回答 2

1

经过更多调查后,答案非常简单:没有一个提到的分析器能够满足我在这个问题中想要的功能 - 不是 VisualVM,不是 YourKit,也不是 JProfiler。

因此,如果您想要此类信息,最好的选择可能是BTrace,它是免费的,并且与 JMX 结合使用,几乎可以测量任何东西。从字面上看——你可以访问所有方法调用,包括所有参数,你可以做任何你可以用 Java 编码的事情。

它还包含非常好的示例,因此您将能够在一小时内理解概念并自定义测量。

于 2013-06-25T10:22:04.803 回答
0

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

于 2013-06-05T13:35:02.767 回答