Java Flight Recorder 初探

本贴最后更新于 1700 天前,其中的信息可能已经时移俗易

🌹🌹 如果您觉得我的文章对您有帮助的话,记得在 GitHub 上 star 一波哈 🌹🌹

🌹🌹GitHub_awesome-it-blog 🌹🌹


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 中相关的模块如下:

jdk.jfr 
    * API and internals
    * Requires only java.base (suitable for resource constrained devices)
    
jdk.management.jfr
    * JMX capabilities
    * Requires jdk.jfr and jdk.management

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 文件

JFR 的使用 1.png

就是下面这个文件了

JFR 的使用 2.png

2 通过 jmc 分析 jfr

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

jdk11removejmc.png

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

JDK11JFR 不适配 jmc6 及以前版本.png

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

https://github.com/JDKMissionControl/jmc

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

20190720121145.png

3 参考

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3165 引用 • 8206 回帖
  • jfr
    1 引用
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...