是否可以在 jvisualvm 中同时进行 CPU 和内存分析?

Posted

技术标签:

【中文标题】是否可以在 jvisualvm 中同时进行 CPU 和内存分析?【英文标题】:Is it possible to do CPU and memory profiling in simultaneously in jvisualvm? 【发布时间】:2011-04-05 08:30:18 【问题描述】:

我有一个应用程序运行相当长的分析(大量的数字运算),因此运行一次应用程序大约需要 3-4 小时,充分利用所有内核。现在我很确定我的代码不是防水的,所以我想分析并寻找潜在的弱点。

我已经阅读了很多关于 jvisualvm 的文章,并且也玩过它。然而,它似乎是选择 cpu 或内存分析,而来自 Javalobby 的 this article 有一个有趣的引述,作者说:

我意识到 CPU 和内存分析可以同时完成,但为了本文的目的,我想将它们分开。

谁能否认或证实这一点?如果这是可能的,那将非常有用,所以我不会一遍又一遍地以不同的模式进行分析。如果不可能,是否可以排队进行不同的分析分析,以便我可以在一夜之间运行它们?

谢谢,

【问题讨论】:

【参考方案1】:

不能同时进行 CPU 和内存分析,但您可以非常轻松地在 CPU 和内存之间切换,尤其是在使用“采样器”选项卡时。对于您的情况,我将从简单的监控开始。查看图表,您应该能够判断是否存在内存问题。如果您有内存问题,我会先尝试修复它,然后将您的注意力转移到 CPU 分析上。

【讨论】:

谢谢托马斯。您是否认为可以在没有太多头痛的情况下对分析事件进行排队?还是要求太多? :) 我不确定您所说的“将分析事件排队”是什么意思。你有什么样的活动计划? 我在想 X 分钟 CPU 分析、Y 分钟内存分析、Z 分钟采样等。但是转念一想,我意识到这无论如何都不是一个聪明的方法.. 对,先从监控开始。收集一些监控数据后,您可以决定下一步做什么。切换到“采样器”选项卡并尝试内存或 CPU 采样,具体取决于监控结果。【参考方案2】:

我发现分析器往往会低估对象分配的成本,因此我通常使用 cpu 分析来启用内存分析,因为我觉得这会提供更真实的 CPU 分析结果。 (即使我不看内存分析报告)

如果有疑问,我建议您运行 CPU 配置文件,无论有无内存配置文件,您都会得到截然不同的结果。以我的经验,这两个结果都值得优化。 ;)

顺便说一句:我使用 YourKit,但我不认为 VisualVM 在这方面会有很大不同。

【讨论】:

感谢彼得的快速回复,尽管我想我可能在这个问题上不清楚。是否可以同时运行两个分析?如果有,怎么做? 我假设每个都有一个单独的按钮。当您同时单击两者时会发生什么? 是的,它显示为分析从一种类型切换到另一种类型。用于仪器初始化的应用程序阻塞,这需要很长时间,所以我并没有真正尝试等到底层应用程序完成执行,因为正如我所提到的,它消耗了几乎所有的处理器能力(旨在这样做)并且需要很长时间才能完成。我希望从社区中其他人可能有过的类似经验中学习(也许是更简单的案例) 也许你可以运行一个更简单/更短的测试,这样更容易分析。我不会等到程序结束,你应该会发现一分钟对于繁忙的进程来说已经足够了。

以上是关于是否可以在 jvisualvm 中同时进行 CPU 和内存分析?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使用JVisualVM进行性能分析

如何使用JVisualVM进行性能分析

JvisualVM的使用转载

使用jvisualvm远程监控Java程序

jvisualvm 不会从 CPU 分析中排除某些方法