【Ubuntu】 Perf工具的使用
阿新 • • 發佈:2022-06-01
一、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 的繁忙程度,所以一般選擇暖色調。