2025-03-13 13:48:10 +08:00
|
|
|
|
### Event 结构
|
|
|
|
|
|
|
|
|
|
- Event 大小
|
|
|
|
|
- Event ID
|
|
|
|
|
- 时间戳
|
|
|
|
|
- 持续时间
|
|
|
|
|
- 相关线程 ID
|
|
|
|
|
- 相关堆栈 ID
|
|
|
|
|
|
|
|
|
|
每个 Event 还会有自己的 Payload,承载自己要采集的数据。但不是每个 Event 都填充上面的字段,只是结构里面有,并不会采集。
|
|
|
|
|
|
|
|
|
|
### Event采集的公共配置
|
|
|
|
|
|
|
|
|
|
- enabled:是否启用这个 Event 的采集,true/false
|
|
|
|
|
- cutoff:是否截断,例如:1d、1h、1m、1s、1ms、1ns,0=不截断
|
|
|
|
|
- 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 属性,接下来会提到。**
|
|
|
|
|
|
2025-03-13 14:05:34 +08:00
|
|
|
|
### 举一个自定义配置的例子
|
2025-03-13 13:48:10 +08:00
|
|
|
|
|
2025-03-13 14:05:34 +08:00
|
|
|
|
我们一般通过 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 的采集详细配置。
|
|
|
|
|
|
|
|
|
|
<a href='./1_查看JFR事件的工具JMC.md' target='_blank'>返回上一节</a> <a href='./3_Event采集详细配置.md' target='_blank'>查看下一节</a>
|