Java Flight Recorder(JFR), 以下简称JFR,请注意这个只有Oracle JDK 1.7(7u40)或以上版本才有, OpenJDK木有这东西。
启用:
- Java命令行启动参数加入:
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
- 进程启动后,可以使用jcmd命令采集数据。
c:>jcmd 10156 JFR.start
10156:
Started recording 1. No limit (duration/maxsize/maxage) in use.
Use JFR.dump recording=1 filename=FILEPATH to copy recording data to file.
c:>jcmd 10156 JFR.check
10156:
Recording: recording=1 name="Recording 1" (running)
c:>jcmd 10156 JFR.dump recording=1 filename=d:/tmp/jfr.1 <-请注意这个recording=1与上面check的结果一致。
10156:
Dumped recording 1, 457.2 kB written to:
D: mpjfr.1
c:>jcmd 10156 JFR.stop recording=1
10156:
Stopped recording 1.
- 采集后,打开jmc(java mission controller), 对刚才采集的数据进行分析。
/usr/java/jdk1.7.0_79/bin/jmc d:/tmp/jfr.1
jmc在JDK的bin目录下
events界面,很重要,也许cpu和memory没有任何大的消耗,但在event界面中可以进行查看各种events, 如果出现大量的monitor wait, 有可能系统出现一个处理瓶颈,线程大量处在等待时间,而某个瓶颈可能是单例或者需要集中处理的地方导致。
How to use Oracle JDK Java Flight Recorder (需要Linux support帐号)
https://access.redhat.com/solutions/662203