社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Pyflame 生成火焰图分析 Python 程序

编程派 • 5 年前 • 981 次点击  

后台回复【入门资料

送你十本Python电子书


文 | EarlGrey

推荐 | 编程派公众号

微信号:codingpy


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

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

安装 Pyflame

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

第一步:安装系统依赖

  1. # Install build dependencies on Debian or Ubuntu.

  2. sudo apt-get install autoconf automake autotools-dev g++ pkg-config python-dev python3-dev libtool make

第二步:编译

  1. git clone https://github.com/uber/pyflame.git

  2. cd pyflame


  3. ./autogen.sh

  4. ./configure

  5. make

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

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

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

  2. sudo apt-get update

  3. sudo apt-get install pyflame

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

  1. conda install -c eklitzke pyflame

使用 Pyflame

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

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

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

  2. cd FlameGraph

依附到正在执行的进程

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

查看要调试的进行ID:

  1. ps aux|grep uwsgi


  2. root 30130.00.725892426556? S 7200 :26 uwsgi /var/www/v7/uwsgi.ini

  3. root 30182.22.3788673286448? Sl720194:37 uwsgi /var/www/v7/uwsgi.ini

  4. root 30192.92.3702777285000? Sl720258:56 uwsgi

然后执行命令:

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

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

追踪命令的执行情况

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

  1. pyflame -t py.test tests/

结语

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

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


回复下方「关键词」,获取优质资源


回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版

回复关键词「m」,立即获取Python精选优质文章合集

回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~


推荐阅读



题图:pexels,CC0 授权。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/48095
 
981 次点击