火焰图是什么:
火焰图是跟踪堆栈线程然后重复多次采样而生成的。每个方法的调用都会有一个长方型表示,长方型的长度和它在采样中出现的次数成正比。 火焰图是基于stack信息生成的SVG 图片, 用来展示 CPU 的调用栈。
- y 轴表示调用栈, 每一层都是一个函数. 调用栈越深, 火焰就越高, 顶部就是正在执行的函数, 下方都是它的父函数.
- x 轴表示抽样数, 如果一个函数在 x 轴占据的宽度越宽, 就表示它被抽到的次数多, 即执行的时间长. 注意, x 轴不代表时间, 而是所有的调用栈合并后, 按字母顺序排列的.
- 火焰图就是看顶层的哪个函数占据的宽度最大. 只要有"平顶"(plateaus), 就表示该函数可能存在性能问题。颜色没有特殊含义, 因为火焰图表示的是 CPU 的繁忙程度, 所以一般选择暖色调.
火焰图分类:
On-CPU火焰图: 基于线程在CPU执行上耗时采样,可以直观地查看线程花费在CPU上的时间分布 Off-CPU火焰图: 基于线程在CPU等待(I/O、锁、中断等原因)上耗时采样,可以直观地查看线程花费在阻塞上的时间分布
如何配置:
在flink-conf.yaml中配置 即可 官方参数释义:
参数 | 默认值 | 释义 |
---|
rest.flamegraph.enabled | false | 是否开启火焰图 | rest.flamegraph.cleanup-interval | 10min | 统计信息的缓存清除时间 | rrest.flamegraph.delay-between-samples | 50 ms | 构建 FlameGraph 的单个堆栈跟踪样本之间的延迟。 | rest.flamegraph.num-samples | 100 | 构建flamegraph的采样数 | rest.flamegraph.refresh-interval | 1 min | 火焰图刷新的时间间隔 | rest.flamegraph.stack-depth | 100 | 创建FlameGraphs 的堆栈跟踪的最大深度 |
效果:
|