分析一个软件的性能瓶颈到底在哪,有很多种方式,
最简单的一种,就是在重要或频繁调用的函数,前后加上时间戳,两次相减即函数执行时间,
例如:
clock_gettime(&start_time)
xxx_function();
clock_gettime($end_time)
一个复杂的软件系统得有若干个重要核心函数,而且调用栈也不止一层,
这么加debug代码,实在太麻烦了!
下面介绍一下火焰图的使用,
本文还是老规矩,不讲原理,不讲详细参数,不啰嗦,三步到位!
先看hello world的直观效果,复杂的用法再举一反三,自己研究!
步骤如下:
1. 下载FlameGraph
git clone https://github.com/brendangregg/FlameGraph.git
2.采集数据
启动要分析的程序,假设pid是12345,执行如下命令:
perf record -F 100 -p 12345 -g -- sleep 60
3.生成火焰图
进入FlameGraph工程目录,执行命令:
perf script -i perf.data | ./stackcollapse-perf.pl | ./flamegraph.pl > process.svg
用浏览器打开process.svg火焰图,
y 轴表示调用栈层次, 每一层表示一个函数,函数栈越深, 火焰就越高, 顶部就是正在执行的函数, 下方都是它的调用函数.
x 轴表示抽样数, 如果一个函数在 x 轴的宽度越宽, 就表示它被抽到的次数多, 执行时间也越长.