me/JFR/2_Event结构及配置.md

54 lines
2.8 KiB
Markdown
Raw Permalink 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
- thresholdEvent 持续时间超过这个阈值才会采集例如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 的采集详细配置。
<a href='./1_查看JFR事件的工具JMC.md' target='_blank'>返回上一节</a> <a href='./3_Event采集详细配置.md' target='_blank'>查看下一节</a>