火焰图是一款性能调优工具,可以清晰的看出程序运行瓶颈在哪里。

pyflame则是由Uber开源出来的针对python程序生成火焰图的工具。

这里记录一下安装过程以及遇到的错误。

安装环境CentOS7,首先安装系统依赖

1
sudo yum install autoconf automake gcc-c++ python-devel libtool

如果使用python3则需要安装python3-devel

然后从github上clone项目到本地,并编译:

1
2
3
4
5
6
git clone https://github.com/uber/pyflame.git
cd pyflame
./autogen.sh
./configure
make
make install

然后再clone另一个项目flamegraph到本地:

1
2
git clone https://github.com/brendangregg/FlameGraph.git
cd FlameGraph

查看要调试的进行ID:

1
2
3
4
5
ps aux|grep uwsgi
root 3013 0.0 0.7 258924 26556 ? S 7月20 0:26 uwsgi /var/www/v7/uwsgi.ini
root 3018 2.2 2.3 7886732 86448 ? Sl 7月20 194:37 uwsgi /var/www/v7/uwsgi.ini
root 3019 2.9 2.3 7027772 85000 ? Sl 7月20 258:56 uwsgi

运行下面的命令报错

1
2
3
pyflame -s 60 -r 0.01 3019
Failed to detect a Python ABI.

但其实是安装了python-abi的:

1
2
3
4
5
rpm -q --provides python | grep abi
python(abi) = 2.7
python(abi) = 2.7
python-abi = 2.7

解决起来需要手动指定--abi参数:

1
pyflame -s 60 -r 0.01 --abi=26 3013 | ./flamegraph.pl > mypyflame.svg

其中:

  • -s 60, 总采样时间为 60s
  • -r 0.01, 以0.01s 的频率做采样

一分钟后就可以看到火焰图了。