pyflame性能分析

注意: 不支持3.6+

安装

apt-get

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

apt-get install libtool

yum install gcc-c++ libstdc++-devel


git clone https://github.com/uber/pyflame.git
cd pyflame
 
./autogen.sh
./configure

make && make install


==>  安装好后可执行文件在 ./src/pyflame


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

    获取 flamegraph.pl,
    
    chmod +x flamegraph.pl
    

yum install perl

使用

# Attach to PID 12345 and profile it for 1 second
pyflame -p 12345
 
# Attach to PID 768 and profile it for 5 seconds, sampling every 0.01 seconds
pyflame -s 5 -r 0.01 -p 768
 
# Run py.test against tests/, emitting sample data to prof.txt
pyflame -o prof.txt -t py.test tests/

# Generate flame graph for pid 12345; assumes flamegraph.pl is in your $PATH.
pyflame -s 5 -r 0.01 -p 768 | flamegraph.pl > myprofile.svg

横条越长的部分,表示被采样到的次数越多,从下往上可以看到在每一层上的函数耗时分布

如何读懂火焰图

perf 命令

Linux 系统原生提供的性能分析工具,会返回 CPU 正在执行的函数名以及调用栈(stack)

执行频率是 99Hz(每秒99次),如果99次都返回同一个函数名,那就说明 CPU 这一秒钟都在执行同一个函数,可能存在性能问题


perf record -F 99 -p 13204 -g --sleep 30

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

Buy me a 肥仔水!