为啥 visualvm 中的“总时间”列与运行时持续时间不同?

Posted

技术标签:

【中文标题】为啥 visualvm 中的“总时间”列与运行时持续时间不同?【英文标题】:Why does the "Total Time" column in visualvm differ from runtime duration?为什么 visualvm 中的“总时间”列与运行时持续时间不同? 【发布时间】:2019-10-09 05:47:34 【问题描述】:

我已经在java 进程上的visualvm 中运行 CPU Profiler 45 分钟,但是“总时间”列仅显示大约 104,000ms 已过去(即 104 秒),并且它会增长但它慢慢长大。

这显然没有映射到真实的物理时间,因为我预计会看到 45*60*1000 毫秒(不是 104*1000)。它在测量什么?

【问题讨论】:

您能否提供一个屏幕,以便我们知道您的要求是什么? 你问的是total method time in visualvm吗? @Andronicus 我在问题中包含了一张图片和更多信息 @Naman 是的,这就是我要说的。我已经运行分析器 45 分钟,但 Total Time 列仅显示 104 秒。 【参考方案1】:

正如工具提示悬停所说“在此方法的所有调用中花费的时间(包括进一步的方法调用)”。 IE。方法特定的挂钟时间,包括在方法中完成的调用。

您可以将其与总 CPU 时间进行比较,以了解处理器使用时间的效率。

【讨论】:

为什么当我运行分析器 45 分钟后,列总和为 104 秒? @ABC 因为您有其他程序正在运行。您不认为 CPU 专用于您的程序,是吗?此外,除非你真的在消耗 CPU,否则时间可能不会太长,这就是为什么热点更容易检测和改进的原因。 我有一个繁忙的 while 循环,我认为它会占用 CPU 100% 的时间? 很难说。尝试在那个循环中计算哈希值,看看它在你实际做某事时是否会有所不同。 采样器往往是一个更有用的工具,至少在我的经验中是这样。没有分析器的开销,并且仍然有效地找到热点。

以上是关于为啥 visualvm 中的“总时间”列与运行时持续时间不同?的主要内容,如果未能解决你的问题,请参考以下文章

Java VisualVM 中的“总时间(CPU)”是不是包含 CPU 用于执行其他进程的时间?

为啥不是所有方法都显示在 VisualVM 分析器中?

如何获取使用 VisualVM 的方法的总总时间

为啥在 VisualVM 中 CPU 时间大于挂钟时间?

使用VisualVM远程监控JVM Linux服务器配置方法

如何在 STS 中使用 VisualVM 分析器?