我们公司目前正在寻找Java分析器。我们得到了Compuware(dynaTrace产品)的报价,它能够为CPU分析提供这种输出(例子):
(好吧,我无法发布图片,如果没有这张图片,问题的其余部分应该清晰明了)
dynaTrace为您提供的是一个特定方法的所有调用的列表,其中包含每次调用占用多少时间的确切信息,CPU时间和等待IO的时间。这(在我看来很简单)信息是非常重要的,也是我们绝对需要的。
现在,问题是...... 其他探查者实际上能够提供这种信息之王?
我尝试了VisualVM(随JDK一起提供),YourKit和JProfiler。我没有找到任何方法来生成这些输出。
通过采样测量总的墙面时间和实际的CPU时间应该非常容易,但似乎JProfiler和YourKit只能测量墙壁时间或CPU时间,而不能同时测量两者。 VisualVM在采样时显示墙壁和CPU时间,这将使其优于这两种付费产品中的任何一种。
暂停某个方法的调用并分别显示每个调用的结果(而不是方法的聚合信息,而不考虑调用的位置和使用的参数)似乎是更高级的功能,而不是这些产品似乎有能力做到这一点。
这两个功能对于我们在剖析器中至关重要。如果有人知道提供它们的产品,请告诉我,我将非常感激。
当然,一些提到的剖析器很可能具有这些功能,而且我没有找到如何在有限的时间内完成这些功能。
答案 0 :(得分:0)
虽然JProfiler不以这种方式显示它,但它有一个线程状态的概念,并且CPU视图在右上角有一个线程状态选择器。 This screen cast显示切换线程状态的效果。默认情况下,JProfiler显示“Runnable”状态,而不是挂起时间(“All states”)。
答案 1 :(得分:0)
经过更多的调查后,答案非常简单: none 所提到的分析器能够满足我在这个问题上的需求 - 不是VisualVM,不是YourKit而不是JProfiler。
因此,如果你想要这种信息,最好的选择可能是BTrace,这是免费的,并且与JMX结合使用,可以测量几乎任何东西。从字面上看 - 你可以访问所有方法调用,包括所有参数,你可以用Java编写任何代码。
该版本中还包含非常好的示例,因此您可以在一小时内理解该概念并自定义测量值。