1. 程式人生 > 其它 >【Ubuntu】 Perf工具的使用

【Ubuntu】 Perf工具的使用

一、perf工具的安裝

sudo apt-get install linux-tools-common
sudo apt-get install linux-tools-"$(uname -r)"
sudo apt-get install linux-cloud-tools-"$(uname -r)"
sudo apt-get install linux-tools-generic
sudo apt-get install linux-cloud-tools-generic
perf --version #驗證是否安裝成功

二、火焰圖生成工具的下載

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

無需編譯等工作

三、perf工具的使用以及火焰圖的生成

cd ~/Perf   #儲存perf獲取的資料,與FlameGraph同目錄下

sudo perf record -g -F 99 -ag -p 40789 -- sleep 20    #跟蹤程序40789效能監控,每秒取樣99次,時長20s

-F 99:每秒取樣99次

-p:指定程序id

-g:記錄呼叫棧

sleep 20:持續取樣20s

sudo perf script --header > out.perf01

../FlameGraph/stackcollapse-perf.pl out.perf01 | ../FlameGraph/flamegraph.pl > perf-20s.svg    #生成火焰圖

perf相關命令

序號 命令 作用
1 annotate 解析perf record生成的perf.data檔案,顯示被註釋的程式碼。
2 archive 根據資料檔案記錄的build-id,將所有被取樣到的elf檔案打包。利用此壓縮包,可以再任何機器上分析資料檔案中記錄的取樣資料。
3 bench perf中內建的benchmark,目前包括兩套針對排程器和記憶體管理子系統的benchmark。
4 buildid-cache 管理perf的buildid快取,每個elf檔案都有一個獨一無二的buildid。buildid被perf用來關聯效能資料與elf檔案。
5 buildid-list 列出資料檔案中記錄的所有buildid。
6 diff 對比兩個資料檔案的差異。能夠給出每個符號(函式)在熱點分析上的具體差異。
7 evlist 列出資料檔案perf.data中所有效能事件。
8 inject 該工具讀取perf record工具記錄的事件流,並將其定向到標準輸出。在被分析程式碼中的任何一點,都可以向事件流中注入其它事件。
9 kmem 針對核心記憶體(slab)子系統進行追蹤測量的工具
10 kvm 用來追蹤測試執行在KVM虛擬機器上的Guest OS。
11 list 列出當前系統支援的所有效能事件。包括硬體效能事件、軟體效能事件以及檢查點。
12 lock 分析核心中的鎖資訊,包括鎖的爭用情況,等待延遲等。
13 mem 記憶體存取情況
14 record 收集取樣資訊,並將其記錄在資料檔案中。隨後可通過其它工具對資料檔案進行分析。
15 report 讀取perf record建立的資料檔案,並給出熱點分析結果。
16 sched 針對排程器子系統的分析工具。
17 script 執行perl或python寫的功能擴充套件指令碼、生成指令碼框架、讀取資料檔案中的資料資訊等。
18 stat 執行某個命令,收集特定程序的效能概況,包括CPI、Cache丟失率等。
19 test perf對當前軟硬體平臺進行健全性測試,可用此工具測試當前的軟硬體平臺是否能支援perf的所有功能。
20 timechart 針對測試期間系統行為進行視覺化的工具
21 top 類似於linux的top命令,對系統性能進行實時分析。
22 trace 關於syscall的工具。
23 probe 用於定義動態檢查點。

火焰圖的含義:

y 軸表示呼叫棧,每一層都是一個函式。呼叫棧越深,火焰就越高,頂部就是正在執行的函式,下方都是它的父函式。
x 軸表示抽樣數,如果一個函式在 x 軸佔據的寬度越寬,就表示它被抽到的次數多,即執行的時間長。注意,x 軸不代表時間,而是所有的呼叫棧合併後,按字母順序排列的。
火焰圖就是看頂層的哪個函式佔據的寬度最大。只要有"平頂"(plateaus),就表示該函式可能存在效能問題。
顏色沒有特殊含義,因為火焰圖表示的是 CPU 的繁忙程度,所以一般選擇暖色調。