jfr
Java Flight Recorder(JFR)是一种用于收集有关正在运行的Java应用程序的诊断和分析数据的工具。
它集成到 Java 虚拟机 (JVM) 中,几乎不会造成性能开销,因此即使在负载较重的生产环境中也可以使用。
注意
JDK8的8u262
版本之后才支持JFR
命令选项
命令选项 | 描述 |
---|---|
-d, --delay <nanotime> | 延迟记录时长(d, h, m, s),不带单位就是秒,默认0 , 如5s |
--dumponexit <boolean> | dump记录在jvm退出的时候,默认false |
--duration <nanotime> | JFR记录持续时间(d, h, m, s), 不带单位就是秒, 默认一直记录 |
-f, --filename <file> | 记录结果文件路径 |
--maxage <nanotime> | 最大记录时长保留记录文件(d, h, m, s),默认无限制 |
--maxsize <number> | 最大记录文件大小限制,可为G(B)、M(B)、k(B),0 表示无限制 |
-n, --name <name> | 记录名称 |
-r, --recording <record-number> | 记录编号,默认为-1 |
-s, --settings <value> | JFR配置文件,位于**$JAVA_HOME/lib/jfr/*.jfc**,默认default ,可选值profile |
--state <state> | 通过状态查询记录,可选值**new 、delay 、running 、stopped 、closed ** |
-h, --help | 帮助 |
<cmd> | 命令名称,start 、status 、stop 、dump |
示例
bash
# 启动记录
[arthas@17088]$ jfr start
Started recording 1. No limit specified, using maxsize=250MB as default.
# 查看记录状态
[arthas@17088]$ jfr status
Recording: recording=1 name=Recording-1 (running)
# 停止记录
[arthas@17088]$ jfr -r 1 stop
Stop recording 1, The result will be written to:
C:\Users\A\.arthas\lib\3.6.7\arthas\arthas-output\20230404-165306.jfr
# dump运行中的记录
# 启动记录
[arthas@17088]$ jfr start
Recording: recording=3 name=Recording-3 (running)
# dump不指定目录
[arthas@17088]$ jfr dump -r 3
Dump recording 3, The result will be written to:
C:\Users\A\.arthas\lib\3.6.7\arthas\arthas-output\20230404-174033.jfr
# dump指定目录
[arthas@18604]$ jfr dump -r 3 -f /tmp/test.jfr
Dump recording 3, The result will be written to:
/tmp/test.jfr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
遇到的问题
在某些JDK版本可能会提示
Jfr is a commercial feature and will need to be unlocked before use
JAVA启动参数
-XX:+UnlockCommercialFeatures
启动即可jfr文件打开方式
使用
$JAVA_HOME/bin/jmc.exe
(Java Mission Control)打开查看若JDK为带有jmc.exe文件
Oracle Java Mission Control启动提示
java.lang.IllegalStateException: 无法获取应用程序服务。请确保解析并启动了 org.eclipse.core.runtime 束(请参阅 config.ini)
ini-startup plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.500.v20220509-0833 --launcher.appendVmargs # 新增JDK配置 -vm D:\tools\jdk-11.0.13\bin -vmargs -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints -XX:FlightRecorderOptions=stackdepth=128 -XX:+FlightRecorder -XX:StartFlightRecording=name=JMC_Default,maxsize=100m -Djava.net.preferIPv4Stack=true -Djdk.attach.allowAttachSelf=true --add-exports=java.xml/com.sun.org.apache.xerces.internal.parsers=ALL-UNNAMED --add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED --add-exports=java.management/sun.management=ALL-UNNAMED --add-exports=java.management/sun.management.counter.perf=ALL-UNNAMED --add-exports=jdk.management.agent/jdk.internal.agent=ALL-UNNAMED --add-exports=jdk.attach/sun.tools.attach=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=jdk.attach/sun.tools.attach=ALL-UNNAMED -Dsun.java.command=JMC --add-exports=java.desktop/sun.awt.windows=ALL-UNNAMED
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27