Python效能分析工具py spy原理用法解析

2021-10-10 12:29:33 字數 2204 閱讀 2325

更多程式設計教程請到:菜鳥教程

py-spy介紹

引用官方的介紹:

py-spy是python程式的抽樣分析器。 它允許您視覺化檢視python程式在哪些地方花了更多時間,整個監控方式無需重新啟動程式或以任何方式修改工程**。 py-spy的開銷非常低:它是用rust編寫的,速度與編譯的python程式不在同乙個程序中執行。 這意味著py-spy可以安全地用於生成生產環境中的python應用調優分析。

github: 安裝

pip install py-spy

py-spy從命令列工作,並獲取要從中取樣的程式的pid或要執行的python程式的命令列。py-spy具有三個子命令record,top和dump:

使用py-spy 生成火焰圖

​ py-spy是乙個非常好用而且簡單的庫,看完他的readme 介紹文件基本就可以入手使用spy。這個工具一是可以生成profile 火焰圖,二是可以定位到程式中最耗時間的**的位置。它的優點在於完全不用修改**,相比較其他的一些效能調查工具,py-spy這一點非常棒,當你debug 乙個線上正在執行的程式的時候,只需要提供程序id,py-spy 就可以直接生成火焰圖。

py-spy record -o profile.svg --pid 12345

或者py-spy record -o profile.svg-python myprogram.py

"12345" 為程式執行的pid,當執行這行命令的時候,py-spy 開始抽樣的程式simlple 並且生成火焰圖,我們可以等待1分鐘左右 ctrl+c 結束,這時候會在執行這行命令的當前目錄下生成 profile.svg 火焰圖, 如下圖:

​ 通過生成火焰圖分析程式瓶頸大概率可以找到並解決80%的程式效能問題,但是還有一種問題,如果我的火焰圖沒有平頂,但是程式依舊很慢,該如何定位問題?

沒有平頂情況下,定位程式中耗時最多函式/**

如下圖,通過火焰圖並沒有發現程式中的平頂

top功能

這時候要用到py-spy 提供的 top 命令,top顯示了在python程式中花費最多時間的功能的實時檢視,類似於unix top命令。

py-spy top --pid 12345

或py-spy top-python myprogram.py

​ 輸入上述命令後,在控制台會顯示程式實時的執行狀態,這裡可以介紹一下圖中4個引數的含義, 然後可以通過按1,2,3,4 四個按鍵,讓程式按照下圖所述排序。

比較直觀的 使用3 , 可以比較直接的看出程式執行中,所佔比消耗時間最多的函式,然後從函式如圖進行分析,如下圖,可以看出 是wrap 裝飾器函式消耗的時間最長,我們用wrapt 這個c寫的裝飾器進行替換後效率有了明顯的提公升。

總結 : 使用py-spy 相對於其他一些python效能分析工具,優勢在於使用非常簡單,而且無須對**做任何改動,並且可以在保護現場情況下,直接生成火焰圖,還可檢視實時程式執行狀態。

火焰圖怎麼看

首先你需要知道:

x方向是取樣時間。

y方向是函式呼叫棧。

如果給你乙個這樣的火焰圖,你應該得出什麼資訊:

1.a()是開始的執行函式,但沒有消耗cpu,在這個函式裡執行了b(),h()。

2.a()的兩個分支b()和h(),這表明a()裡面可能有乙個條件語句,繼續可以看到b()分支消耗的 cpu 大大高於h()。

3.h()函式沒有消耗cpu,cpu全被i()函式占有。

4.b()函式這條支路繼續往上,一直到d(),由d()函式的子函式e()消耗一部分cpu,f()下的g()消耗一部分cpu,你會發現d()的最右邊往上缺了一塊,這塊就是d()執行消耗的cpu。

結論:消耗cpu的函式為e(),g(),d(),i()。

因此,如果要調查效能問題,首先應該調查g(),其次是i()。

Python效能分析工具Profile

優化的前提是需要了解效能瓶頸在什麼地方,程式執行的主要時間是消耗在 對於比較複雜的 可以借助一些工具來定位,python 內建了豐富的效能分析工具,如 profile,cprofile 與 hotshot 等。其中 profiler 是 python 自帶的一組程式,能夠描述程式執行時候的效能,並提...

mysql 效能分析 mysql效能分析工具

一 expalin 在sql語句之前加上explain關鍵字就可以獲取這條sql語句執行的計畫 那麼返回的這些欄位是什麼呢?我們先關心一下比較重要的幾個字段 1.select type 查詢型別 1 簡單查詢,沒有union和子查詢 2 priamry 主查詢,有union或子查詢的最外層查詢 3 ...

效能分析工具彙總

cpu效能分析工具 vmstat pssar time strace pstree topmemory效能分析工具 vmstat strace topipcs ipcrm cat proc meminfo cat proc slabinfo cat proc maps i o效能分析工具 vmsta...