在线支持
在线支持
微信支持
微信支持
运维神器--火焰图介绍
2022-11-21 16:27:22
95次阅读
0个评论

背景

运维人员在SQL运行效率慢或卡住的情况时,通常需要通过查看计算引擎的server、executor的jstack来排查此时引擎正在干什么,卡在了哪行代码,定位线程长时间停顿的原因。虽然有一些性能分析工具可以帮助运维人员去排查问题,但是这类工具通常会给用户展示大量的细节信息和数据,需要花费大量时间跟精力来优化可能并不重要的地方。

火焰图(Flame Graph)是由 Linux 性能优化大师 Brendan Gregg 发明的一种类似于火焰状的全景图,可以根据集群信息定量展示出所有可能导致性能瓶颈,可以快速帮助运维人员查看函数执行的频繁程度、哪些函数经常阻塞以及分析程序的性能瓶颈等等。(火焰图介绍:https://www.brendangregg.com/flamegraphs.html

火焰图整体如一团跳动的火焰一般,这就是它名字的由来:

image.png


需要注意以下几点:

  • 纵向(Y 轴)高低不平,表示的是函数调用栈的深度。每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。
  • 横向(X 轴)表示该函数执行消耗的时间,横向上会按照字母顺序排序,而且如果是同样的调用会做合并(注意:如果一个函数在 X 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长,所以这里不是严格意义上的执行消耗的时间),所以一个横向宽度越大的函数调用,一般很可能是程序的瓶颈。
  • 火焰图的颜色是随机分配的,并不是颜色越深就是越瓶颈。因为火焰图表示的是 CPU 的繁忙程度,所以一般都是暖色调。我们需要留意的就是那些比较宽大的火苗。只要有"平顶",就表示该函数可能存在性能问题。

如何绘制火焰图
方式一:

Aquila Insight 引入了性能分析利器火焰图(Flame Graphs),用户可以直接通过Insight server可视化界面进行查看 (目前仅限商业版以及社区版订阅模式提供)。
image.png


方式二:

除此之外,Github上有 Brendan D. Gregg 的 Flame Graph 工程实现了一套生成火焰图的脚本.我们也可以直接克隆下来直接用,遵循以下流程:
# git clone https://github.com/brendangregg/FlameGraph.git
① 捕获堆栈
使用perf捕捉进程运行堆栈信息
② 折叠堆栈
# perf script -i /root/perf.data &> /root/perf.unfold
③ 用 stackcollapse-perf.pl 将 perf 解析出的内容 perf.unfold 中的符号进行折叠
# ./stackcollapse-perf.pl /root/perf.unfold &> /root/perf.folded
④ 生成火焰图
./flamegraph.pl /root/perf.folded > /root/perf.svg
⑤ 浏览器打开。

火焰图因为是 svg 图片,可以与用户互动:

  • 鼠标悬浮:火焰每一层都会标注函数名,鼠标悬浮时会显示完整的函数名、抽样抽中的次数、占据总抽样次数的百分比。
  • 点击放大:在某一层点击,火焰图会水平放大,该层会占据所有宽度,显示详细信息。左上角会同时显示“Reset Zoom”,点击该链接,图片就会恢复原样。
  • 搜索:按下 Ctrl + F 会显示一个搜索框,用户可以输入关键词或正则表达式,所有符合条件的函数名会高亮显示。


收藏 0 0

登录 后评论。没有帐号? 注册 一个。

admin

官方人员
  • 0 回答
  • 0 粉丝
  • 0 关注