Java Mission Control 和 Flight Recorder 是否提供与 VisualVM 相同的功能?

Do Java Mission Control and Flight Recorder deliver same functionality as VisualVM?

Java 的(相对)新内置性能 monitor/profiler 是任务控制。 Oracle docs advertise 它们可以在生产中使用而不会导致性能下降(小于 2%):

The tool chain [Mission Control + Flight Recorder] enables developers and administrators to collect and analyze data from Java applications running locally or deployed in production environments.

我已经使用 jvisualvm (VisualVM) 很多年了,但从未在生产环境中使用过,因为它 确实 会产生性能开销。

所以我问:Mission Control(及其飞行记录器)和 VisualVM 之间有什么不同可以 MC/FR 不影响性能? 或者他们不包含 VisualVM 提供的某些 features/capabilities?

方法分析的主要性能差异在于 MC/JFR 使用采样,并且每个采样间隔仅采样几个线程。它使用与 AsyncGetCallTrace 类似的方法(参见示例 http://psy-lob-saw.blogspot.com/2016/06/the-pros-and-cons-of-agct.html

因为我使用 MC/JFR,所以我不太熟悉 VisualVM 如何进行采样分析,但我相信它使用的方法不同。

MC/JFR 将其数据收集引擎深度集成到 HotSpot JVM 中,VisualVM 使用外部 APIs/MXBeans。这也有助于 JFR 降低性能开销。 通常,JFR 旨在查找热点,而不是收集 100% 正确但可能会降低应用程序速度并影响实际行为的数据。这适用于方法和分配采样,以及有关延迟事件 (wait/sleep/block) 的其他信息,其中仅记录超过特定阈值的事件。我不太熟悉这与 VisualVM 的比较。

除此之外,这两个工具具有不同的功能集,none 其中一个是另一个的超集。