Java `JFR` (Java Flight Recorder) / `JMC` (Java Mission Control) 深度性能分析

各位观众老爷,大家好!今天咱们就来聊聊Java的“黑匣子”—— JFR(Java Flight Recorder)和它的“驾驶舱”—— JMC(Java Mission Control)。 别害怕,这俩玩意儿听起来高大上,其实用起来也挺接地气的,能帮你揪出Java程序里那些偷偷摸摸搞事情的性能瓶颈。

开场白:谁动了我的奶酪?

想象一下,你的Java程序本来跑得飞快,像一辆法拉利。突然有一天,它开始卡顿,像拖拉机一样慢吞吞的。这时候,你肯定想知道:谁动了我的奶酪?是谁在搞鬼?

这就是JFR和JMC登场的时候了。JFR就像一个飞行记录仪,它会默默地记录你的Java程序运行时的各种信息,包括CPU使用率、内存分配、垃圾回收、线程活动等等。JMC则是一个分析工具,它可以读取JFR记录的数据,并以可视化的方式展示出来,让你一眼就能看出哪里出了问题。

第一部分:JFR:偷偷摸摸的记录者

JFR是Java自带的性能监控工具,从Java 7 Update 40开始引入,Java 8及以后版本默认开启。它就像一个间谍,默默地记录着你的程序运行时的各种信息,但它又很聪明,不会对程序的性能造成太大的影响。

1.1 如何开启JFR?

开启JFR的方式有很多种,最简单的一种就是在启动Java程序时,加上一些JVM参数:

java -XX:StartFlightRecording=duration=60s,filename=myrecording.jfr my.application.MainClass

这段命令的意思是:

  • -XX:StartFlightRecording: 告诉JVM我们要开启JFR。
  • duration=60s: 记录60秒的数据。
  • filename=myrecording.jfr: 将记录的数据保存到名为myrecording.jfr的文件中。
  • my.application.MainClass: 你的程序入口类。

当然,你也可以用更高级的方式来配置JFR,例如:

java -XX:StartFlightRecording=delay=0s,duration=60s,filename=myrecording.jfr,settings=profile my.application.MainClass
  • delay=0s: 立即开始记录。
  • settings=profile: 使用profile级别的配置,会记录更多的信息,但对性能的影响也会稍微大一些。 还可以是settings=default 使用默认的。

1.2 JFR的配置选项

JFR有很多配置选项,可以根据你的需要来调整。常用的配置选项包括:

| 配置选项 | 描述 |
| duration | 持续时间,例如 30s, 1m, 1h。 |
| delay | 延迟多久开始记录,例如 0s, 10s。 |
| filename | JFR 文件的路径,例如 myrecording.jfr

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注