Systemtap生成Flame Graph(火焰图)

Systemtap生成Flame Graph(火焰图) | dcshi@唐品

Systemtap生成Flame Graph(火焰图)

通过性能分析来确定什么原因导致CPU繁忙是日常工作中长做的事情,这往往会涉及到栈性能分析。通过定期采样的方式来确定哪些代码是导致CPU繁忙的原因是一个比较粗糙的方法。一个更好的方式是创建一个定时中断来收集程序运行时的计数,函数地址,甚至整个堆栈回溯,最后打印为我们可阅读的报告.

我们常用的性能分析工具有oprofilegprof,dtracesystemtap

Flame Graph

火焰图,是一个把采样所得到的堆栈跟踪可视化展示的工具。它是基于上面提到的性能分析工具的结果,Flame graph本身并不具备性能检测的能力。

下面是我为ngx_http_qrcode_module制作的一个火焰图:
flame graph for ngx_http_qrcode_module

  • 每个框代表一个栈里的一个函数
  • Y轴代表栈深度(栈桢数)。最顶端的框显示正在运行的函数,这之下的框都是调用者。在下面的函数是上面函数的父函数
  • X轴代表采样总量。从左到右并不代表时间变化,从左到右也不具备顺序性
  • 框的宽度代表占用CPU总时间。宽的框代表的函数可能比窄的运行慢,或者被调用了更多次数。框的颜色深浅也没有任何意义
  • 如果是多线程同时采样,采样总数会超过总时间
原文地址:https://www.cnblogs.com/lexus/p/2983697.html