熟悉我的朋友可能知道,我是打中间件比赛出身,硕士一直在做分布式的东西,毕业后去了行业内比较大的厂做相对底层的东西,分布式数据库研发与性能优化。在追求极致性能的场景下,了解你的程序运行过程中cpu在干什么很重要,火焰图就是一种非常直观的展示cpu在程序整个生命周期过程中时间分配的工具。
关于火焰图介绍的文章其实比较多了,本文意在将这有点复杂的东西用最容易上手的方式介绍给大家。本文的所有代码都在Centos7.6的系统上执行过,如果有朋友发现在你的机器上执行不了也辛苦一定给我留言,这篇文章的方法也是我将来要反复要用的,任何错误和纰漏都是在坑我自己。
火焰图是什么:
#include <stdio.h>
void foo(){
int i,j;
for(i=0;i<1000;i++)
j+=2;
}
int main(void) {
int i;
for(i=0;i<100000000;i++){
foo();
}
return 0;
}
以上是一段很简单的c语言程序和与其对应的火焰图(程序用的别人的,图是我自己生成的,侵删),可以认为火焰图横轴代表程序运行的时间,上方重叠长条的就是调用栈。火焰图的颜色没有任何意义,主要要看的是某一层调用栈的时间占比。
比如对于图中的例子我们想看foo函数是否存在性能问题,我们就要首先去思考foo函数的这个绿色长条相对比在a.out这