了解 visualvm 分析器中的 CPU 时间

Posted

技术标签:

【中文标题】了解 visualvm 分析器中的 CPU 时间【英文标题】:Understanding CPU time in visualvm profiler 【发布时间】:2013-06-11 16:27:30 【问题描述】:

我已经开始使用 visualvm 来分析我在 Eclipse 中启动的应用程序。然后我启动了visualvm,它最初给出了可信的结果。

一段时间后,两个进程出现在监视器中,这会消耗大量时间。

我没有故意调用这些。一段时间后,它们消失了。它们是分析过程的产物吗?我需要担心吗?

我的例程很少出现在配置文件中,主要是它们调用的库。有没有办法显示哪些例程调用了最常用的例程?

【问题讨论】:

【参考方案1】:

最好从 CPU 采样开始,如果你不知道哪部分代码慢的话。一旦您更好地了解(基于采样结果)正在发生的事情,您就可以只分析应用程序的一部分,这很慢。您需要设置分析根和检测过滤器,并且不要忘记拍摄收集结果的快照。请参阅 Profiling With VisualVM, Part 1 和 Profiling With VisualVM, Part 2 以获取有关分析以及如何设置分析根和检测过滤器的更多信息。

【讨论】:

【参考方案2】:

VisualVM 使用 Java 来执行它的工作。这意味着您将看到一些与它所做的 RMI 调用相关的人工制品。你可以忽略它们。

我使用 YourKit,它不这样做,但它不是免费的;)

【讨论】:

很有可能。如果线程池不是,你仍然很可能可以忽略它。例如空闲线程池可能看起来像是在消耗 CPU 到分析器(它没有像建议的那样使用)【参考方案3】:

VisualVM 将跟踪它所监视的 java 程序调用的所有方法,因此您的程序或其库之一正在调用这些方法。 VisualVM 也连接到它,因此可能会有一些小工件。

至于搜索,可能最简单的方法是按您自己的包进行过滤。底部有一个空间,您可以在其中输入这些内容,这样您就可以看到您自己的哪些方法确实需要时间。另外你应该注意你所在的线程,通常你会想看看你的“主”线程是什么。其他线程很有趣,但并不总是让您最好地了解程序的行为方式。

【讨论】:

+1 会试试这个。我只有一个主线程(至少是我自己的)

以上是关于了解 visualvm 分析器中的 CPU 时间的主要内容,如果未能解决你的问题,请参考以下文章

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

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

远程启动 Java CPU Profiler,如 VisualVM,但自动化

VisualVM 未显示任何调用 CPU 性能分析的方法

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

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