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

2.8 KiB
Raw Permalink Blame History

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文件取其中一个配置举个例子例如

<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 标签。举个例子:

这里配置的Memory Leak Detection对应其中Memory Leak Detectionselection标签,只有:

  • memory-leak-detection = off
  • memory-leak-detection-enabled = false

这样 OldObjectSample 的 enabled 才为 false因为<setting name="enabled" control="memory-leak-detection-enabled">true</setting>,点击【高级】会跳转到所有 Event 的具体配置。在接下来的章节,我们来讲一下所有 Event 的采集详细配置。

返回上一节 查看下一节