JDK Mission Control

TIPS

  • 本文基于JDK Mission Control 7.0.1编写
  • 不同版本的JDK Mission Control特性、功能甚至界面都可能不同,因此建议使用和笔者相同的版本测试(例如7.0.1版本的界面和JDK 8内置的JMC 5.5界面简直不像是一个软件)
  • 有关商业授权的说明
    • JMC曾经是一款商业授权工具(例如在JDK 8中),需要商业授权才能在生产环境中使用。但根据Oracle Binary Code协议,在个人开发环境中可以免费使用。
    • 现已开源,在JDK 11(哪怕是OpenJDK)中,任何人都可以使用JFR + JMC(需遵循 UPL协议 )!
    • 本文只调研了JDK的长期支持版本JDK 8/JDK 11的商业授权规则,没有去细究短期支持版本JDK 9、10等短期支持版本的商业授权规则(主要是生产环境应该没人敢用短期支持的JDK版本)。

JDK Mission Control也叫Java Mission Control,简称JMC。
JMC的两大功能:

  • 作为JMX控制台,监控虚拟机MBean提供的数据
  • 可持续收集数据的JFR(Java Flight Recorder),并可作为JFR的可视化分析工具

在正式探讨JMC之前,有必要先聊下JFR。
JFR(Java Flight Recorder)是一种用于收集有关运行中的Java应用的诊断信息和性能数据的工具。它几乎没有性能开销,因此,即使在负载很大的生产环境中也可以使用。JFR主要用于以下场景:

  • 性能分析JFR可连续捕获应用的信息。比如执行概要分析(显示程序花费时间的地方),线程停顿/等待时间概要分析(显示线程为什么不运行的原因),分配概要分析(显示分配压力的位置),垃圾回收详细信息等
  • 黑盒分析由于JFR开销非常低,因此可持续打开Flight Recorder,让JFR将信息保存到缓存区,然后在稍后再去分析这块数据,定位特定异常的原因
  • 支持与调试联系Oracle支持人员寻求帮助时,JFR收集到的数据可能至关重要

    安装JMC

    对于JDK 10及更低版本

    对于JDK 10及更低版本,JDK内置了JMC,使用如下命令启动:

    1. jmc

    TIPS
    笔者测试,发现JDK 8中内置的JMC在macOS下无法正常启动,这是由于JAR包冲突导致的。解决方案有两种:

  • 参照 https://stackoverflow.com/questions/48400346/java-mission-control-from-jdk-1-8-0-161-frozen-upon-startup-on-mac-os-x 的说明,替换JAR包并重启。

  • 使用独立运行的JMC(建议)。↓↓↓↓↓↓↓↓↓

    对于JDK 11及更高版本

    TIPS
    此方式也同样适用于JDK 8
    JMC独立出来并开源了,既可以下载独立软件,也可作为Eclipse的插件存在。但不管哪种方式,都需要手动下载。JMC相关地址:

  • 开源地址:https://jdk.java.net/jmc/

  • 开源的Wiki:https://wiki.openjdk.java.net/display/jmc/Main
  • Oracle侧有关JMC的官方网站:https://www.oracle.com/technetwork/java/javaseproducts/mission-control/index.htmlTIPS:这里面有个视频介绍资料,讲得挺好的,不过使用的版本有点老了
  • Oracle侧有关JMC的官方文档:https://docs.oracle.com/javacomponents/index.html

    下载

  • 前往 https://jdk.java.net/jmc/ 根据造自己的操作系统下载即可。这里提供百度盘加速下载地址,里面Linux、macOS、Windows都提供了:链接:https://pan.baidu.com/s/1HXjzNDpzin6fXGrZPyQeWQ 密码:aon2 1 代码块

  • 下载完成后,参照 https://www.oracle.com/technetwork/java/javase/jmc-install-6415206.html 的说明安装即可,里面包含了JMC在操作系统、在各种场景下的安装。

    使用JMC + JFR

    如果想监控的应用所使用的JDK版本 < JDK 11

  • 在启动你想监控的应用时,需添加如下参数:

    1. -XX:+UnlockCommercialFeatures -XX:+FlightRecorder

    其中:

    • UnlockCommercialFeatures:解锁商业特性
    • FlightRecorder:为应用启用或停用JFR(JDK 8u40开始,省略)
  • 然后使用JMC连接该应用即可监控该应用

此外,还有其他相关参数可参考:https://docs.oracle.com/javacomponents/jmc-5-5/jfr-command-reference/command-line-options.htm

如果想监控的应用所使用的JDK版本 >= JDK 11

  • 被监控的应用无需设置JVM参数,直接启动即可。
  • 使用JMC连接该应用即可监控该应用

    功能说明

    JMX

  • 概览:各种概要信息

  • MBean浏览器:展示应用被JMX管理的Bean
  • 触发器:配置触发规则,当规则满足时,就触发某个操作(在操作一栏配置)
  • 系统:查看系统相关信息
  • 内存:查看内存相关信息
  • 线程:查看线程相关信息
  • 诊断命令:可视化使用诊断命令,相当于可视化的jcmd

    JFR

  • 自动分析结果:JMC自动给出的优化提议

  • Java应用程序:展示应用的各种执行情况
  • JVM内部:展示JVM层面的执行情况
  • 环境:展示操作系统层面的执行情况
  • 事件:展示录制期间发生的事件

TIPS
各项指标的含义详见:JMC - 帮助 - JDK Mission Control帮助

插件

  • 帮助 - 安装新软件

    JMC特点

    优点:JMC的主要优点在于对JFR的支持

  • JFR在生产环境中对吞吐量的影响一般不会高于1%

  • JFR监控过程是可动态的,无需重启
  • JFR监控过程对应用完全透明,无需修改应用的代码,也无需安装额外的插件或代理
  • JFR提供的数据质量非常高,对监控、排查的参考价值更大

缺点: