利用Java Flight Recorder(JFR)诊断timing及内存问题

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

原文地址:https://www.cnblogs.com/bjfarmer/p/6991692.html