为啥 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 用于执行其他进程的时间?