1. 引言
JMC 是“Oracle Java Mission Control”的缩写,他是一个自 Oracle JDK 7u40 版本开始提供的一个 java 工具。
JMC 主要有两大功能:
- 实时监控 Oracle JVM 的运行状态;
- java 运行过程中产生的 dump 数据分析。
本文,我们就来详细看看 jmc 具体能够做哪些事吧。
- 注:本文翻译自 https://www.overops.com/blog/oracle-java-mission-control-the-ultimate-guide
2.实时监控
JMC 提供了非常强大的实时监控功能。
可以看到上图中,左侧有一个“JVM 浏览器”,里面当前机器上正在运行的 JVM 进程。
右键点击你想要监控的一项,然后点击启动 JMX 控制台,右侧就会显示相应的监控页面。
如图所示,在监控界面上,我们可以点击“ ”号,实现监控指标的添加。
在监控界面的最下方,我们可以通过切换标签页进一步查看我们关心的详细信息。
2.1 事件触发器 Event triggers
事件戳发器可以配置各种指标的阈值,一旦达到阈值就可以自动触发某些预定事件,例如触发 JFR 记录(关于 JFR 记录的详细信息,请参见下文)。
点击添加按钮可以看到,触发器的种类非常多,JMC 也允许你编写自己的 JMX 计数器。
2.2 内存
我们通常非常关心程序运行过程中的内存占用情况,内存标签下提供了相应的信息。你可以看到完整的内存使用信息以及 GC 信息。
2.3 线程
线程标签页中,详细显示了 app 当前执行的线程情况:
- 线程状态(running、blocked 或 waiting)
- 锁名称
- 线程是否死锁
- 线程被 block 的次数
- 每个线程的 cpu 占用率
- 自线程启动以来分配的内存
但上述信息如果想要启用,需要先勾选 CPU 分析,死锁检测和内存分配跟踪。
3. 飞行记录器 Java Flight Recorder
所谓的“飞行记录器”,其实就是航空领域所说的“黑匣子”,用来在飞机发生事故后保留飞行数据以便进行事故调查或者数据分析。
在线上持续运行的程序服务来说,有这样一个“黑匣子”记录当时的运行数据是同样重要的,JMC 就实现了这样的功能。
3.1 启用飞行记录器
要想启用飞行记录器,需要在 JVM 参数中增加以下两个参数:
-XX: UnlockCommercialFeatures -XX: FlightRecorder
默认情况下,JVM仅允许在安全点进行堆栈跟踪,如果要更精确的堆栈跟踪,你需要在 JVM 参数中增加以下两个参数:
-XX: UnlockDiagnosticVMOptions -XX: DebugNonSafepoints
3.2 飞行记录器的详细内容
最新版的 JMC 相比于之前的版本发生了很大的变化,不再是分选项卡来实现结果的呈现,而是如图所示,在左侧列出了详细的报告明细,你只需要点击查看即可,并且 JMC 会给出有关当前性能的建议。