JDK Mission Control 8 发布

123 阅读5分钟

JMC 8 发布:引入新的图形和默认的堆转储分析,提供更深层次的洞察力

JDK Mission Control (JMC)是最著名的仪表板解决方案,用于分析JDK飞行记录器(JFR)收集的数据,JDK飞行记录器是JDK的内置剖析和事件收集框架。

JMC 8的二进制版本现在可以通过AdoptOpenJDKOracle下载。JMC 8 通过引入新的图形和默认的堆转储分析,提供了更多对应用程序的洞察力。

JMC建立在Eclipse IDE之上,可以独立或作为Eclipse插件安装。JMC是JRockit任务控制的继承者,它是由上诉虚拟机公司在2008年Oracle收购该公司之前创建的。 JMC](github.com/openjdk/jmc)是一个(生产)剖析和诊断工具,也可用作解析和处理 .jfr 文件的库。

JMC应用程序提供了所有本地运行的Java进程的概览。如下图所示,右键单击其中一个正在运行的Java应用程序,会在下拉菜单中显示可用选项。JMX控制台用于持续监控环境,与MBeans交互,或在远程机器上调用 [jcmd](<https://docs.oracle.com/en/java/javase/13/docs/specs/man/jcmd.html>) 诊断命令。Flight Recording和Dump Heap可以分别用于创建一个记录和一个堆转储,以便进一步分析。

JDK任务控制(JMC)最著名的是用于分析JDK 飞行记录器(JFR)收集的数据的仪表板解决方案,JDK飞行记录器是JDK的内置剖析和事件收集框架。JMC 8的二进制版本现在可以通过AdoptOpenJDKOracle下载。JMC 8 通过引入新的图形和默认的堆转储分析,提供了更多对应用程序的洞察力。

JMC建立在Eclipse IDE之上,可以独立或作为Eclipse插件安装。JM C是JRockit任务控制的继承者,它是由上诉虚拟机公司在2008年Oracle收购该公司之前创建的。 JMC是一个(生产)剖析和诊断工具,也可用作解析和处理 .jfr 文件的库。

JMC应用程序提供了所有本地运行的Java进程的概览。如下图所示,右键单击其中一个正在运行的Java应用程序,会在下拉菜单中显示可用选项。JMX控制台用于持续监控环境,与MBeans交互,或在远程机器上调用 [jcmd](<https://docs.oracle.com/en/java/javase/13/docs/specs/man/jcmd.html>)诊断命令。飞行记录和 Dump Heap可分别用于创建记录和堆转储,以便进一步分析。

https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6535529339574ba29a13b7921c6bd9f2~tplv-k3u1fbpfcp-zoom-1.image

JFR是一个命令行工具,以前生产环境需要支付许可费。但是,从OpenJDK 8u272开始,它已经可以免费使用。产生的数据以 .jfr 文件的形式存储。也可以从JMC应用程序中点击 "开始飞行记录"。飞行记录向导会显示记录类型和要收集的事件列表。

https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8cd6ab78efc44d61bdef23c604e5bdd9~tplv-k3u1fbpfcp-zoom-1.image

JFR的主要特点是可以在生产环境中低开销使用。在记录过程中,每分钟约两到四MB存储10万个事件的数据,包括许多堆栈痕迹。JFR的开销取决于所选的测量值。在默认设置下,它的开销小于2%。

JOverflow是一个提供堆转储高级分析的可选插件,现在默认包含在JMC 8中。在这个版本中,该插件被转换为标准小部件工具包(SWT)。JOverflow还提供了对Java堆的见解,并协助开发人员优化堆。要开始,请在JMC应用程序中创建并打开一个堆转储。JOverflow的功能,如层次树图,可以用来改善应用程序的堆使用情况。

https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d66c2f91d5814e47ba2e2cf9f4fdd0fc~tplv-k3u1fbpfcp-zoom-1.image

火焰视图经过改进,可使用标准视角,如下图所示。该视图用于显示所选事件的堆栈痕迹汇总。

https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/22ad3005bada4570a9cc3fd462fc3b84~tplv-k3u1fbpfcp-zoom-1.image

在JMC 8中新增的是图形视图,这是一个有向图,每个节点都包含一个单独的方法。

https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/a58241c72fc44e799892d42a8a805ab8~tplv-k3u1fbpfcp-zoom-1.image

上图还显示了在JMC 7中被删除的方法简介前辈和后辈。但是,由于客户的需求,在JMC 8中重新引入了它们。

目前Windows上还不支持Graph View。对于其他支持的操作系统,请检查JMC控制台输出的空图,因为有时可能需要安装WebKit。例如,在Linux上,WebKit的安装方法如下。

apt install libwebkit2gtk-4.0-dev。

JMC 8

JMC 8 标志着JMC Agent的首次发布。通过代理,JFR 事件声明添加到任何代码库中。该代理使用 JMX API 来控制工具。事件可以用来捕获诸如字段和参数值等元素。

新的 Rules API 2.0使得使用其他规则的中间结果成为可能。JFR Writer作为新的核心模块被引入。它可以通过将事件写入Java缓冲区来达到测试目的。

JMC 8 已经考虑了JMC未来版本需要改进的地方。JDK 16 中引入了一个新的分配事件。在某些情况下,分配事件发生得非常频繁,影响了性能。新的解决方案使用数据生产速率而不是在特定的时间点采样,以减少开销。

当显示大量数据和节点时,图形可视化器也存在一些性能挑战。Marcus Hirt 解释 表示,这些将根据噪声网络中图修剪的相关论文进行改进。

Flame Graph 和 Graph Views的工作原理是基于counts,对于CPU负载情况下,它的工作效果很好。但是,对于分配,最好使用内存作为衡量标准。这将通过为图增加一个属性选择器来解决。

JMC 代理,现在是 JMC 的一部分,未来也会改进。比如是可以右键点击堆栈框架来检索更详细的信息。

Marcus Hirt,Datadog的工程总监和OpenJDK JMC项目的项目负责人,撰写了几篇有趣的JMC相关的博客文章和一个教程。更详细的信息还可以观看他在 JMC 8及其他 讨论会议上的演讲。

本文翻译自 www.infoq.com/news/2021/0…