4.3 可视化故障处理工具

4.3 可视化故障处理工具

JDK中除了附带大量的命令行工具外,还提供了几个功能集成度更高的可视化工具,用户可以使用这些可视化工具以更加便捷的方式进行进程故障诊断和调试工作。这类工具主要包括JConsole、 JHSDB、VisualVM和JMC四个。其中,JConsole是最古老,早在JDK 5时期就已经存在的虚拟机监控工具,而JHSDB虽然名义上是JDK 9中才正式提供,但之前已经以sa-jdi.jar包里面的HSDB(可视化工具)和CLHSDB(命令行工具)的形式存在了很长一段时间[^1]。它们两个都是JDK的正式成员,随着JDK一同发布,无须独立下载,使用也是完全免费的。

VisualVM在JDK 6 Update 7中首次发布,直到JRockit Mission Control与OracleJDK的融合工作完成之前,它都曾是Oracle主力推动的多合一故障处理工具,现在它已经从OracleJDK中分离出来,成为一个独立发展的开源项目[^2]。VisualVM已不是JDK中的正式成员,但仍是可以免费下载、使用的。

Java Mission Control,曾经是大名鼎鼎的来自BEA公司的图形化诊断工具,随着BEA公司被Oracle 收购,它便被融合进OracleJDK之中。在JDK 7 Update 40时开始随JDK一起发布,后来Java SE Advanced产品线建立,Oracle明确区分了Oracle OpenJDK和OracleJDK的差别[^3],JMC从JDK 11开始又被移除出JDK。虽然在2018年Oracle将JMC开源并交付给OpenJDK组织进行管理,但开源并不意味着免费使用,JMC需要与HotSpot内部的“飞行记录仪”(Java Flight Recorder,JFR)配合才能工作,而在JDK 11以前,JFR的开启必须解锁OracleJDK的商业特性支持(使用JCMD的VM.unlock_commercial_features或启动时加入-XX:+UnlockCommercialFeatures参数),所以这项功能在生产环境中仍然是需要付费才能使用的商业特性。

为避免本节讲解的内容变成对软件说明文档的简单翻译,笔者准备了一些代码样例,大多数是笔者特意编写的反面教材。稍后将会使用几款工具去监控、分析这些代码存在的问题,算是本节简单的实战演练。读者可以把在可视化工具观察到的数据、现象,与前面两章中讲解的理论知识进行互相验证。

[^1]: 准确来说是Linux和Solaris在OracleJDK 6就可以使用HSDB和CLHSDB了,Windows上要到Oracle- JDK 7才可以用。
[^2]: VisualVM官方站点:https://visualvm.github.io。
[^3]: 详见https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later。