文章

pyflame与strace工具分析系统瓶颈

2018-12-07 | 1 minute read |标签 性能 系统 系统分析 |分类 开发

pyflame分析系统瓶颈

pyflame与火焰图

pyflame

是由uber开发的用于分析python性能瓶颈工具,是用C++写的,支持py2.6~py3.6 之间的版本,但是他本身并不生成火焰图,还需要配合另外一个工具

安装办法

在其github首页上,详细讲述在ubuntu环境中如何安装,笔者正好也是ubuntu,按照官方配置方式,完全可以使用,只是最后最好将编译出来的pyflame 和flamegraph.pl, 做个超链或者直接copy到/usr/bin/

基本使用命令:

pyflame -p 12345 -s 60 -r 0.01| flamegraph.pl > myprofile.svg

参数说明

-p 是进程号

-s 是统计时间

-r 是采样时间,这个解释下pyflame 通过程序堆栈中当前执行代码片段来判断当前执行的程序代码

最后生成的火焰图解释

image04

这种图横轴代表时间,纵轴代表调用程序的堆栈,那我们怎么看出程序问题再哪呢 其实我们只要关注程序堆栈调用时间最长我们写的代码,比如这张图中model_create 17行调用执行时间最久,所以我们就应该去分析这行代码为啥这么久,在业务层代码中,这种情况应该循环次数过多造成的 所以解决方案一般都是考虑如何少循环。

最后再说一下,系统瓶颈总结起来就两大类,一类是计算密集型,这种一般通过改善算法和减少计算次数来解决,一类是IO密集型,这类一般都是大量时间等待IO返回,解决方案都是异步IO。所以用火焰图只能判断出瓶颈函数是哪里,但是造成系统瓶颈原因还需要我们通过调研函数来分析 或者结合sar或者iostart 之类的工具进一步分析