了解 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...”