Linux中CPU性能分析工具perf簡單使用(親測可用)


一、背景

Linux系統出現性能瓶頸時,往往因個別函數長時間占用CPU造成,解決問題的第一步就是定位到引起問題的函數,perf就是這樣的工具,它是Linux內核源碼提供的工具。

二、核心概念

  1. 數據采集
    perf通過采樣的方式,記錄CPU正在執行的函數名及函數的調用棧,通常采樣頻率是每秒99次,perf的數據采集有額外性能開銷,所以不宜長時間使用。
    perf命令說明:
sudo perf record -F 99 -p 13204 -g -- sleep 30
# record 表示記錄cpu的執行數據
# -F:采樣頻率(次/秒)
# -p:進程號
# -g:輸出調用棧數據
# -- sleep:本次采樣總時長(秒)
  1. 數據處理
    perf往往輸出一個龐大的數據,肉眼無法直接分析,需要借助可視化工具FlameGraph將數據轉換位瀏覽器可讀的svg文件再供人眼閱讀。

  2. 火焰圖
    X軸:被采集命中的調用次數,在這個方向上若某個幀越寬,表示被采樣命中的次數越多,其占用cpu的時間也就越長。
    Y軸:調用棧,每一幀代表一個函數調用,越上層的越先返回,最頂層的就是正在執行的,只有頂幀才具有分析價值
    注意:

1.用戶可以用鼠標閱讀火焰圖中棧幀的信息,還可以進行一些簡單操作。
2.火焰圖中棧與棧幀的顏色沒有特殊含義。
3.在X軸方向上,函數是按字母順序排列的,而不是時間。

  1. 若火焰圖中出現平頂的棧,則說明這個棧的頂幀函數比較耗時,它就是性能分析的重點。
  2. 火焰圖的局限性:

1.調用棧很深時,perf只能返回局部的棧,不能提供完整的調用數據。
2.對於匿名函數,系統會以內存地址給函數命名,存在隨機性,可讀性差,定位困難。

三、案例實踐

  1. 安裝perf
yum list perf
yum -y install perf.x86_64
  1. 由於需要到github下載可視化分析工具FlameGraph,所以要先安裝git
yum list git
yum -y install git.x86_64
git clone https://github.com/JaxYoun/FlameGraph.git
mv FlameGraph fg  //方便起見,重命名FlameGraph目錄
  1. 采集、轉換、可視化【root權限】
perf record -F 99 -p 18733 -g -- sleep 30
perf script -i perf.data &> perf.unfold
fg/stackcollapse-perf.pl perf.unfold &> perf.folded
fg/flamegraph.pl perf.folded > perf.svg
  1. 將perf.svg下載到本地用Chrome瀏覽器打開即可閱讀。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM