10.29 Pyflame 生成火焰图分析 Python 程序

后台回复【入门资料】

送你十本Python电子书

Pyflame 生成火焰图分析 Python 程序

文 | EarlGrey

Pyflame 是 Uber 官方开源的 Python 性能分析工具,可以用来生成火焰图。相较于内置的 profile 或 cProfile 模块,Pyflame 的开销更小,性能表现更好,而且可展示更多的性能数据。还有一个优点,就是不用修改你的Python代码,直接用命令行对当前的 Python 进程进行 profile。

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

Pyflame 生成火焰图分析 Python 程序

安装 Pyflame

以 Ubuntu 系统为例,参照如下命令即可安装 Pyflame:

第一步:安装系统依赖

  1. <code># Install build dependencies on Debian or Ubuntu./<code>

  2. <code>sudo apt-getinstall autoconf automake autotools-dev g++ pkg-config python-dev python3-dev libtool make/<code>

第二步:编译

  1. <code>git clone https://github.com/uber/pyflame.git/<code>

  2. <code>cd pyflame/<code>


  3. <code>./autogen.sh/<code>

  4. <code>./configure/<code>

  5. <code>make/<code>

安装好后可执行文件在 ./src/pyflame 中。

如果不想手动编译安装,可以选择网友预先构建的安装包:

  1. <code>sudo apt-add-repository ppa:trevorjay/pyflame/<code>

  2. <code>sudo apt-getupdate/<code>

  3. <code>sudo apt-getinstall pyflame/<code>

如果你使用的是 conda ,那么可以直接通过如下命令安装:

  1. <code>conda install -c eklitzke pyflame/<code>

使用 Pyflame

Pyflame 提供了两种使用方式,一种是直接依附到(attach to)正在执行的进程,另一种则是追踪某个命令从头到尾的执行情况。

需要注意的是,Pyflame 无法直接生成火焰图,而是输出符合另一个专门工具 flamegraph 要求的数据。因此我们还要补充一个步骤:

  1. <code>git clone https://github.com/brendangregg/FlameGraph.git/<code>

  2. <code>cd FlameGraph/<code>

依附到正在执行的进程

假设我们要分析 uwsgi 进程,首先确认进程的 pid:

查看要调试的进行ID:

  1. <code>ps aux|grep uwsgi/<code>


  2. <code>root 30130.00.725892426556? S 7月200:26 uwsgi /var/www/v7/uwsgi.ini/<code>

  3. <code>root 30182.22.3788673286448? Sl7月20194:37 uwsgi /var/www/v7/uwsgi.ini/<code>

  4. <code>root 30192.92.3702777285000? Sl7月20258:56 uwsgi/<code>

然后执行命令:

  1. <code># 生成进程 3013 的火焰图;默认 $PATH 路径中包含有 flamegraph.pl/<code>

  2. <code>pyflame -p 3013| flamegraph.pl > myprofile.svg/<code>

追踪命令的执行情况

我们也可以用 Pyflame 追踪某个命令从开始到结束的完整执行情况。例如追踪某个测试或者批量任务的运行情况。只需要在 pyflame 命令的最后,添加 <code>-t/<code>旗标即可实现,<code>-t/<code>后面的均被视为要运行的命令:

  1. <code>pyflame -t py.test tests//<code>

结语

Pyflame 生成的火焰图可以用 Chrome打开,能进行缩放和选择操作。综合上面的介绍,可以看出 Pyflame 的优势还是尤其明显的,性能更强,不用修改 Python 代码即可使用。

目前,Pyflame 在 Github 上有 2.6k 的标星。


分享到:


相關文章: