如何解释 visualvm cpu 示例和从中创建的快照之间的不一致?

Posted

技术标签:

【中文标题】如何解释 visualvm cpu 示例和从中创建的快照之间的不一致?【英文标题】:How to explain inconsistencies between visualvm cpu sample and snapshot created from it? 【发布时间】:2013-03-26 10:54:46 【问题描述】:

我使用了 visualvm 的 cpu 采样器来记录我的应用程序的行为,以便找到性能瓶颈。我可以在实时热点视图中看到一些有趣的结果,但是当我从实时视图中拍摄快照以供以后工作时,该快照中的热点完全不同。这张图解释得很好:http://tinypic.com/view.php?pic=auhx0j&s=6

这种不一致怎么可能?也许我不明白什么是实时取景和快照,有人可以澄清一下吗?

【问题讨论】:

我不熟悉这个工具,但显然程序在做 I/O,所以 CPU 时间没有意义。我建议熟悉issues in profiling 感谢您的提示,但这些值的相关性是完全不同的问题,稍后我将进行调查,但首先我必须解决这些值在上述观点中不同的谜团...... 【参考方案1】:

我也在寻找采样器和快照热点之间存在不一致的原因。由于我在这里或其他任何地方都找不到解释,所以我试图自己弄清楚。

tl;dr

这很可能是快照视图的可视化中的一个错误,因为它似乎没有完全尊重启动采样器时默认设置的排除包,如 sun.* 等。

我是如何得出结论的?

嗯,我玩过不同的包排除设置,全部关闭,一些打开等等,并且总是查看采样器和快照视图来比较它们。 虽然我排除了java.*, sun.* 包,但它们仍然显示在快照视图中,但不显示在采样器视图中。我仍然没有得到的是,当我删除所有包排除项时,快照和采样器视图与每个人所期望的相同,无论排除哪些包。

到目前为止,我的两分钱。取样愉快!

【讨论】:

【参考方案2】:

看起来很奇怪。如果您能提供如何重现它的步骤,我将很乐意对其进行调查。

【讨论】:

抱歉,重现这几乎是不可能的,因为它已在比我最大敌人的母亲更大的应用程序的预生产环境中检测到:-)。

以上是关于如何解释 visualvm cpu 示例和从中创建的快照之间的不一致?的主要内容,如果未能解决你的问题,请参考以下文章

Visual VM:如何解释 Self Time 与 Self Time (CPU)

解释 VisualVM 回溯

如何使用jvisualvm进行cpu或内存抽样

在 VisualVM 中哪里可以找到时间(CPU)列?

VisualVM:CPU/内存分析器卡在“连接到目标 JVM...”

如何在 VisualVM 中显示调用树?