我们公司目前正在寻找Java profiler。我们收到了来自 Compuware(dynaTrace 产品)的报价,它能够为 CPU 分析提供这种输出(示例):
(好的,我不能发布图片,剩下的问题应该没有这张图片就清楚了)
dynaTrace 为您提供的是特定方法的所有调用的列表,其中包含有关每次调用花费多少时间、其中多少是 CPU 时间以及等待 IO 的确切信息。这个(在我看来非常简单)信息非常重要,也是我们绝对需要的。
现在,问题是……还有什么其他分析器实际上能够提供这个信息之王?
我尝试了 VisualVM(JDK 附带)、YourKit 和 JProfiler。我没有找到任何方法来产生这个输出。
通过采样测量总挂墙时间和实际 CPU 时间应该非常容易,但 JProfiler 和 YourKit 似乎只能测量挂墙时间或 CPU 时间,而不能同时测量两者。VisualVM 在采样时同时显示墙和 CPU 时间,这将使它比这两种付费产品中的任何一种都好。
分离某个方法的调用并分别显示每个调用的结果(而不是一个方法的聚合信息,而不考虑它被调用的位置和参数)似乎是更高级的功能,而这些产品似乎都没有这个功能。
这两个功能对我们在分析器中是必不可少的。如果有人知道提供他们的产品,请告诉我,我将非常感激。
当然,很可能提到的一些分析器具有这些功能,而我在有限的时间内没有找到如何去做,我不得不研究它们。