Linux程式效能分析和火焰圖
Linux程式效能分析和火焰圖
Linux程式的效能分析工具數量比較多,涉及到整個作業系統的方方面面,可能是開源的原因吧,相對於Windows來說豐富太多。其中應用分析效能方面Dtrace, SystemTap, Perf_events應該算是這方面的集大成者。Dtrace目前只在較高的核心版本有支援,記得是4.8以後, SystemTap則是需要在Red Hat的官方網站下載OS版本對應的除錯符號和對應的除錯版本核心,配置起來需要花費一定的時間,只有Perf_events使用起來比較方面,但是客觀來說,實力也是最弱的,但應對日一些簡單的場景也足夠了。本文以Perf_events進行示範,算是對這方面感興趣的朋友開個頭,拋磚引玉一下。
Perf_events簡稱perf是 Linux 系統原生提供的效能分析工具,會返回 CPU 正在執行的函式名以及呼叫棧(stack)。通常,它的執行頻率是 99Hz(每秒99次),如果99次都返回同一個函式名,那就說明 CPU 這一秒鐘都在執行同一個函式,可能存在效能問題。
命令如下:
perf record -F 99 -p 15533 -g -- sleep 30
上面的命令中,perf record表示記錄,-F 99表示每秒99次,-p 15533是程式號,即對哪個程式進行分析,也可以對執行緒進行分析, -g表示記錄呼叫棧,sleep 30則是持續30秒。執行後會產生一個龐大的文字檔案。如果一臺伺服器有16個 CPU,每秒抽樣99次,持續30秒,就得到 47,520 個呼叫棧,長達幾十萬甚至上百萬行。為了便於閱讀,perf record命令可以統計每個呼叫棧出現的百分比,然後從高到低排列。
命令如下:
perf report -n --stdio
由於文字顯示方式對於初學者不是十分直觀,於是有了火焰圖, 首先對剛才生成的perf.data進行如下兩步處理。
perf script -i perf.data &> perf.unfold
./stackcollapse-perf.pl perf.unfold &> perf.folded
然後生成火焰圖
./flamegraph.pl perf.folded > perf.svg
具體的火焰圖生成工具可以去如下路徑下載:
https://github.com/brendangregg/FlameGraph
關於火焰圖
火焰圖是基於 perf 結果產生的 SVG 圖片,用來展示 CPU 的呼叫棧。y 軸表示呼叫棧,每一層都是一個函式。呼叫棧越深,火焰就越高,頂部就是正在執行的函式,下方都是它的父函式。x 軸表示抽樣數,如果一個函式在 x 軸佔據的寬度越寬,就表示它被抽到的次數多,即執行的時間長。注意,x 軸不代表時間,而是所有的呼叫棧合併後,按字母順序排列的。火焰圖就是看頂層的哪個函式佔據的寬度最大。只要有"平頂"(plateaus),就表示該函式可能存在效能問題。顏色沒有特殊含義,因為火焰圖表示的是 CPU 的繁忙程度,所以一般選擇暖色調。火焰圖是 SVG 圖片,可以與使用者互動。
--滑鼠懸浮
火焰的每一層都會標註函式名,滑鼠懸浮時會顯示完整的函式名、抽樣抽中的次數、佔據總抽樣次數的百分比。
--點選放大
在某一層點選,火焰圖會水平放大,該層會佔據所有寬度,顯示詳細資訊。左上角會同時顯示"Reset Zoom",點選該連結,圖片就會恢復原樣。
--搜尋
按下 Ctrl + F 會顯示一個搜尋框,使用者可以輸入關鍵詞或正規表示式,所有符合條件的函式名會高亮顯示。
小結
本文對linux應用效能分析工具perf的使用進行了完整的介紹,並對如何生成火焰圖的命令進行了示範,火焰圖的應用場景很多,不僅可以處理perf的輸出資料還可以處理Dtrace命令的輸出,功能強悍,希望本文對大家有所幫助。
相關文章
- Linux火焰圖效能分析文章及視訊演示Linux
- Flame Graph 火焰圖分析 Java 效能Java
- perf及火焰圖的使用,效能分析
- 使用火焰圖進行Java應用效能分析Java
- linux 效能調優工具perf + 火焰圖 常用命令Linux
- Linux效能分析流程圖Linux流程圖
- go效能調優之火焰圖Go
- 程式設計師精進之路:效能調優利器--火焰圖程式設計師
- 如何讀懂火焰圖?+ 例項講解程式效能優化優化
- Rust效能分析之測試及火焰圖,附(lru,lfu,arc)測試Rust
- Linux下用perf生成火焰圖方法Linux
- 效能工具perf的用法以及如何繪製效能火焰圖
- 又一款效能監控利器——火焰圖
- systemtap和火焰圖學習筆記筆記
- Linux效能分析工具與圖形化方法Linux
- Chrome 火焰圖Chrome
- Golang火焰圖Golang
- 容器化 RDS:藉助火焰圖定位Kubernetes效能問題
- Golang FlameGraph(火焰圖)Golang
- Linux效能分析和最佳化命令介紹Linux
- perf/Simpleperf 生成火焰圖
- 火焰圖(perf+ FlameGraph)
- 大話火焰圖(flame graph)
- 深度學習框架火焰圖pprof和CUDA Nsys配置指南深度學習框架
- Perfview 分析程式效能View
- In和exists使用及效能分析(三):in和exists的效能分析
- Linux 效能分析工具彙總Linux
- Linux程式分析Linux
- linux 效能分析工具dstat之一Linux
- Linux init程式分析Linux
- 支付寶小程式效能分析
- (1)Linux效能調優之Linux程式管理Linux
- 看了這篇還不會Linux效能分析和優化,你來打我Linux優化
- Linux程式管理與效能監控Linux
- Linux記憶體效能指標和工具的對應關係圖Linux記憶體指標
- Linux伺服器效能分析與調優Linux伺服器
- 提高方面級情感分析的效能:一種結合詞彙圖和句法圖的方法
- Redis效能分析和運維工具Redis運維