me/JFR参数详解.md
2025-03-11 11:04:19 +08:00

1.5 KiB
Raw Blame History

什么是JFR

JFR是Java Flight RecordJava飞行记录的缩写是JVM内置的基于事件的监控记录框架。这个起名参考了黑匣子对于飞机的作用将Java进程比喻成飞机飞行。顾名思义JFR主要用于问题定位和持续监控。

JFR版本

JFR 0.9版本对应JDK7和8在8u40之后可以在运行时开启/关闭。JFR 1.0版本对应JDK9和10在这一版本之后增加了JFR事件接口用户可以生产或者消费某种事件。JFR 2.0版本对应JDK11,下面的参数都是基于这一版本。

为什么用JFR

为了在生产环境更好的定位问题。JDK提供了一个可以长期开启对应用影响很小的持续监控手段官方的目标是开启JFR监控默认配置非profile对性能的影响在1%以内对JVM Runtime、GC、OS以及Java库进行全方位的监控。

JFR的核心Event

在JFR中一切皆为Event任意JVM行为都是一个Event。

  • 类加载Class Load Event
  • 开启JFR记录Recording Reason Event
  • 就算是有Event丢失他也是一个 EventData Loss Event

Event 在某些特定的时间点产生由名称、时间戳、Event 数据体组成。不同的 Event 数据体不同(例如 CPU 负载Event 前后的 Java 堆大小,获取锁的线程 ID 等)

大部分的 Event都有 Event 是在哪个线程发生的、线程的调用栈、Event 持续时间,利用这些信息,我们可以回溯 Event 发生当时的情况。