火焰图

安装

1
2
3
4
5
6
sudo apt install linux-tools-common
sudo apt install linux-tools-generic linux-cloud-tools-generic

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install linux-tools-5.4.0-77-generic linux-cloud-tools-5.4.0-77-generic

linux-tools 的版本要根据你自身的系统内核来改变。

还要安装一个工具,来生成火焰图:

1
2
3
git clone https://github.com/brendangregg/Flamegraph.git

export PATH=$PATH:FlameGraph的绝对路径

生成火焰图

1
2
3
4
5
6
7
sudo perf record -F 99 -g ./my_app

sudo perf script > out.perf

stackcollapse-perf.pl out.perf > out.folded

flamegraph.pl out.folded > flamegraph.svg // 得到火焰图

理解火焰图

颜色本身没有什么意义

每一列代表一个调用栈(纵向表示调用栈的深度),每一个格子代表一个函数(横向表示消耗的时间)。

火焰图.png

横向来看

  • 由于横向表示消耗的时间,所以一个格子的宽度越大越说明其可能是瓶颈

纵向来看

  • 由于纵向表示调用栈的深度,所以火焰的火苗尖部就是CPU正在执行的操作

综上

  • 主要看那些比较宽大的火苗
  • 特别是那些平头的火苗