Files
docs/JFR_2_事件的结构及配置.md
T
V-LiuShuang 88ac2ee4d3 add
2026-08-14 13:58:12 +08:00

52 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
### Event 结构
- Event 大小
- Event ID
- 时间戳
- 持续时间
- 相关线程 ID
- 相关堆栈 ID
每个 Event 还会有自己的 Payload,承载自己要采集的数据。但不是每个 Event 都填充上面的字段,只是结构里面有,并不会采集。
### Event采集的公共配置
- enabled:是否启用这个 Event 的采集,true/false
- cutoff:是否截断,例如:1d、1h、1m、1s、1ms、1ns0=不截断
- stackTrace:是否启用堆栈跟踪,true/false
- period:采集周期
+ beginChunk:在每一个 Data Chunk 写满另起一个的时候,立刻采集一次
+ everyChunk:在每一个 Data Chunk 写到占用一半空间限制的时候,立刻采集一次
+ endChunk:在每一个 Data Chunk 写满的时候,立刻采集一次
+ 或者配置具体时间,例如:1d、1h、1m、1s、1ms、1ns
- threshold:Event 持续时间超过这个阈值才会采集,例如:1d、1h、1m、1s、1ms、1ns
Event采集详细配置,JDK自带两个模板,在 $JAVA_HOME/lib/jfr 目录下,里面配置格式是一个xml文件,取其中一个配置举个例子,例如:
```xml
<event name="jdk.OldObjectSample">
<setting name="enabled" control="memory-leak-detection-enabled">true</setting>
<setting name="stackTrace" control="memory-leak-detection-stack-trace">false</setting>
<setting name="cutoff" control="memory-leak-detection-cutoff">0 ns</setting>
</event>
```
这个就是 OldObject 采集 Event 的配置,这里配置为:
- 启用这个Event采集
- 不采集堆栈
- 不截断
你也可以加上 period 和 threshold 配置,但对这个 Event 没啥效果。**这里有个 control 属性,接下来会提到。**
### 举一个自定义配置的例子
我们一般通过 JMC 来配置这些 jfr 文件。打开【窗口】/【飞行记录模板管理器】,将 default.jfc 和 profile.jfc 导入进去。先看 default.jfc,点击【编辑】,弹出一个【快速编辑模板】这里是在整体上让你快速配置,是基于 default.jfc 里面的 selection 标签还有 condition 标签。举个例子:
<img width='80%' src='https://pic2.zhimg.com/v2-af3a277d056fd6080e4ced13858ab9bb_1440w.jpg'>
这里配置的*Memory Leak Detection*对应其中*Memory Leak Detection*的*selection*标签,只有:
- memory-leak-detection = off
- memory-leak-detection-enabled = false
这样 OldObjectSample 的 enabled 才为 false,因为`<setting name="enabled" control="memory-leak-detection-enabled">true</setting>`,点击【高级】会跳转到所有 Event 的具体配置。在接下来的章节,我们来讲一下所有 Event 的采集详细配置。