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 的標星。


分享到:


相關文章: