一切福田,不離方寸,從心而覓,感無不通。

Java Flight Recorder初探

1 Java Flight Recorder是啥

1.1 简介

Java Flight Recorder简称JFR,OpenJDK从11版本开始支持。它是一个低开销的数据收集框架,可用于在生产环境中分析Java应用和JVM运行状况及性能问题。

1.2 JFR的背景

故障诊断、监控和profile收集分析是开发周期中不可缺少的一部分。但是很多问题都只会在高负载的生产环境中产生。此时就需要一个可以在生产环境中使用的监控工具,JFR由此而生。

JFR会从应用程序中记录运行时事件,同时也会记录JVM和OS的。记录的结果会存在一个单独的文件中,此文件可供开发工程师分析bug和性能问题。

同时JDK中也提供了可视化工具来分析这类文件。

1.3 详述

JFR在JEP:167的Event-based JVM Tracing的基础上做了扩展。JEP167只将event简单的输出到stdout,而JFR提供了更高性能的基于二进制格式的event输出。

JFR在JDK中相关的模块如下:

JFR有如下两种启动方式

增加JVM参数:-XX:StartFlightRecording

通过jcmd工具使用,用例如下:

* jcmd JFR.start :开始记录

* jcmd JFR.dump filename=recording.jfr :将记录文件dump下来

* jcmd JFR.stop :停止

dump下来的jfr文件可以通过jmc来分析。

1.4 通过jcmd转储JFR文件

就是下面这个文件了

2 通过jmc分析jfr

JDK11中已经移除了jmc工具包,从JDK11的what’s new可以看出:

但是,跑在JDK11上的应用程序,dump出来的jfr用jmc6及以前的版本都是打不开的,需要最新的jcm7才能打开:

经过各种google,最终发现,目前还无法直接下载jmc7的二进制版,但可以自行build。build方式如下:

github.com/JDKMissionCo

编译完成后,打开jmc,加载jfr文件,就可以看到下面的界面了。

3 参考

 

from:https://zhuanlan.zhihu.com/p/87850586