19 lines
1.5 KiB
Markdown
19 lines
1.5 KiB
Markdown
|
### 什么是JFR?
|
|||
|
JFR是**Java Flight Record**(Java飞行记录)的缩写,是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丢失,他也是一个 Event(Data Loss Event)
|
|||
|
|
|||
|
Event 在某些特定的时间点产生,由名称、时间戳、Event 数据体组成。不同的 Event 数据体不同(例如 CPU 负载,Event 前后的 Java 堆大小,获取锁的线程 ID 等)
|
|||
|
|
|||
|
> 大部分的 Event,都有 Event 是在哪个线程发生的、线程的调用栈、Event 持续时间,利用这些信息,我们可以回溯 Event 发生当时的情况。
|