JMC 8 发布:引入新的图形和默认的堆转储分析,提供更深层次的洞察力
JDK Mission Control (JMC)是最著名的仪表板解决方案,用于分析JDK飞行记录器(JFR)收集的数据,JDK飞行记录器是JDK的内置剖析和事件收集框架。
JMC 8的二进制版本现在可以通过AdoptOpenJDK和Oracle下载。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的二进制版本现在可以通过AdoptOpenJDK和Oracle下载。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可分别用于创建记录和堆转储,以便进一步分析。
JFR是一个命令行工具,以前生产环境需要支付许可费。但是,从OpenJDK 8u272开始,它已经可以免费使用。产生的数据以 .jfr
文件的形式存储。也可以从JMC应用程序中点击 "开始飞行记录"。飞行记录向导会显示记录类型和要收集的事件列表。
JFR的主要特点是可以在生产环境中低开销使用。在记录过程中,每分钟约两到四MB存储10万个事件的数据,包括许多堆栈痕迹。JFR的开销取决于所选的测量值。在默认设置下,它的开销小于2%。
JOverflow是一个提供堆转储高级分析的可选插件,现在默认包含在JMC 8中。在这个版本中,该插件被转换为标准小部件工具包(SWT)。JOverflow还提供了对Java堆的见解,并协助开发人员优化堆。要开始,请在JMC应用程序中创建并打开一个堆转储。JOverflow的功能,如层次树图,可以用来改善应用程序的堆使用情况。
火焰视图经过改进,可使用标准视角,如下图所示。该视图用于显示所选事件的堆栈痕迹汇总。
在JMC 8中新增的是图形视图,这是一个有向图,每个节点都包含一个单独的方法。
上图还显示了在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及其他 讨论会议上的演讲。