JFR全名:java flight recoder java飞行记录器,名字定义参考飞机黑匣子而来,顾名思义就是为了在java进程崩溃时也可以提供有效的运行参考数据,抓取的数据格式为jfr,可以使用jmc工具来进行分析,jmc工具可以默认给出分析意见,以供快速的分析定位问题,
该工具受oracle官方推荐,在java8版本前为商业版java才能使用,官方数据cpu只占用越1%,官方推荐为可以长期打开
JFR命令:
//java程序启动时开启JFR
java -XX:StartFlightRecording ...
//Java程序启动时开启JFR并记录jfr文件
java -XX:StartFlightRecording:filename=/tmp/foo.jfr,dumponexit=true ...
-XX:StartFlightRecording:filename=/jfr-log/recording.jfr,dumponexit=true
//查看运行的java进程
jcmd -l
//对当前进程dump
jcmd JFR.dump filename=foo.jfr maxsize=50MB
//对正在运行的java进程启动JFR
jcmd JFR.start
//对正在运行的java进程关闭JFR
jcmd JFR.stop
//检查当前java进程的JFR状态
jcmd JFR.check
//检查当前java进程的JFR配置
jcmd JFR.configure
mac@macs-MBP jdk % jcmd -l
32257 org.jetbrains.idea.maven.server.indexer.MavenServerIndexerMain
738 nutstore.client.gui.NutstoreGUI --delayLaunch 15
31253 com.intellij.database.remote.RemoteJdbcServer com.mysql.cj.jdbc.Driver
7206 demo.simulators.boot.ThreadSimulatorMain
35416 jdk.jcmd/sun.tools.jcmd.JCmd -l
6714 org.jetbrains.jps.cmdline.Launcher /Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/jps-builders.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/jps-builders-6.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/jps-javac-extension.jar:/Applications/IntelliJ IDEA.app/Contents/lib/util-8.jar:/Applications/IntelliJ IDEA.app/Contents/lib/util_rt.jar:/Applications/IntelliJ IDEA.app/Contents/lib/platform-loader.jar:/Applications/IntelliJ IDEA.app/Contents/lib/annotations.jar:/Applications/IntelliJ IDEA.app/Contents/lib/protobuf.jar:/Applications/IntelliJ IDEA.app/Contents/lib/jps-model.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/javac2.jar:/Applications/IntelliJ IDEA.app/Contents/lib/forms_rt.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/aether-dependency-resolver.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/maven-resolver-connector-basic.jar:/Applications/IntelliJ IDEA.app/Contents/plugins/java/lib/maven-resolver-transport-file.ja
15259 org.netbeans.Main --cachedir /Users/mac/Library/Caches/VisualVM/2.1.7 --userdir /Users/mac/Library/Application Support/VisualVM/2.1.7 --branding visualvm --laf com.apple.laf.AquaLookAndFeel
7709 jdk.hotspot.agent/sun.jvm.hotspot.SALauncher clhsdb
7278 com.perfma.xlab.xpocket.launcher.XPocketLauncher
mac@macs-MBP jdk % jcmd 7278 JFR.check
7278:
No available recordings.
Use JFR.start to start a recording.
mac@macs-MBP jdk % jcmd 7278 JFR.start
7278:
Started recording 1. No limit specified, using maxsize=250MB as default.
Use jcmd 7278 JFR.dump name=1 filename=FILEPATH to copy recording data to file.
mac@macs-MBP jdk % jcmd 7278 JFR.check
7278:
Recording 1: name=1 maxsize=250.0MB (running)
mac@macs-MBP jdk % jcmd 7278 JFR.dump
7278:
Dumped recording, 351.1 kB written to:
/Users/mac/Documents/code/XPocket/xpocket/hotspot-pid-7278-2024_01_19_14_18_58.jfr
JDK Mission Control
使用JFR对java进程进行性能监测问题排查
使用JMC 可以打开JFR.dump的jfr文件
JMC有自动分析结果会给出分析情况,以及修改意见
使用jfr命令查看jfr文件:
// 包括CPU使用情况、垃圾回收活动、线程活动、方法调用分析和其他相关统计信息,使用less进行分组
jfr summary hotspot.jfr| less
jfr scrub --all input.jfr output.jfr