安裝Perf
perf的全稱是Performance Event,在2.6.31版本后的Linux內核中均有集成,是Linux自帶的強力性能分析工具,使用現代處理器中的特殊硬體PMU(Performance Monitor Unit,性能監視單元)和內核性能計數器統計性能資料,
perf的作業方式是對運行中的行程按一定頻率進行中斷采樣,獲取當前執行的函式名及呼叫堆疊,如果大部分的采樣點都落在同一個函式上,則表明該函式執行的時間較長或該函式被頻繁呼叫,可能存在性能問題,
1、終端輸入perf,根據提示進行安裝

2、輸入perf得到 usage: perf [–version] [–help] [OPTIONS] COMMAND [ARGS]…
表示安裝成功

安裝完成后,開始正式使用perf工具,
1、使用perf需要首先對目標行程進行采樣:
$ sudo perf record -F 1000 -p pidof fisco-bcos -g – sleep 60
在上述命令中, 我們使用perf record指定記錄性能的統計資料;使用-F指定采樣的頻率為1000Hz,即一秒鐘采樣1000次;使用-p指定要采樣的行程ID(既fisco-bcos的行程ID),我們可以直接通過pidof命令得到;使用-g表示記錄呼叫堆疊資訊;使用sleep指定采樣持續時間為60秒,
可能出現的錯誤:Workload failed: No such file or directory

解決方法:
在終端輸入ps查看當前行程的快照狀態

重新數入命令列,將pidof fisco-bcos改為需要采樣的行程ID
sudo perf record -F 10000 -p 4569 -g – sleep 60
輸出為:

待采樣完成后,perf會將采集到的性能資料寫入當前目錄下的perf.data檔案中,
Ps:我在采樣前創建了perf檔案夾,在里面執行了采集命令,所以我的采集資料會在perf檔案夾下,

2、在采樣資料的檔案夾下執行$ perf report -n
上述命令會讀取perf.data并統計每個呼叫堆疊的百分比,且按照從高到低的順序排列,如下圖所示:

可能出現的問題:
failed to open perf.data: Permission denied
解決方法:
sudo perf report -n
以上資訊已足夠豐富,但可讀性仍然不太友好,盡管示例中perf的用法較為簡單,但實際上perf能做的遠不止于此,配合其他工具,perf采樣出的資料能夠以更加直觀清晰的方式展現在我們面前,這便是我們接下來要介紹的性能分析神器——火焰圖,
火焰圖
火焰圖,即Flame Graph,藉由系統性能大牛 Brendan Gregg提出的動態追蹤技術而發揚光大,主要用于將性能分析工具生成的資料進行可視化處理,方便開發人員一眼就能定位到性能問題所在,火焰圖的使用較為簡單,我們僅需將一系列工具從github上下載下來,置于本地任一目錄即可:
wget https://github.com/brendangregg/FlameGraph/archive/master.zip
unzip master.zip

CPU火焰圖
當我們發現FISCO BCOS性能較低時,直覺上會想弄清楚到底是哪一部分的代碼拖慢了整體速度,CPU是我們的首要考察物件,
首先使用perf對FISCO BCOS行程進行性能采樣:(上面已經講述過)
1.cd FlameGraph-master/
2.sudo perf record -F 10000 -p 4569 -g – sleep 60
執行完畢生成perf.data檔案

對采樣資料檔案進行決議生成堆疊資訊
sudo perf script > cpu.unfold
會生成cpu.unfold檔案
中間有報錯,不知道什么原因,我暫時忽略了,
Failed to open /home/hehongyu/fisco/nodes/127.0.0.1/fisco-bcos, continuing without symbols

生成了采樣資料檔案后,接下來呼叫火焰圖工具生成火焰圖:
對perf.unfold進行符號折疊
sudo ./stackcollapse-perf.pl cpu.unfold > cpu.folded
生成 cpu.folded檔案

生成SVG格式的火焰圖
sudo ./flamegraph.pl cpu.folded > cpu.svg


縱軸表示呼叫堆疊,每一層都是一個函式,也是其上一層的父函式,最頂部就是采樣時正在執行的函式,呼叫堆疊越深,火焰就越高,
橫軸表示抽樣數,注意,并不是表示執行時間,若一個函式的寬度越寬,則表示它被抽到的次數越多,所有呼叫堆疊會在匯總后,按字母序列排列在橫軸上,
火焰圖使用了SVG格式,可互動性大大提高,在瀏覽器中打開時,火焰的每一層都會標注函式名,當滑鼠懸浮其上,會顯示完整的函式名、被抽樣次數和占總抽樣字數的百分比,如上圖,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/56491.html
標籤:其他
上一篇:IPFS/Filecoin如何實作大規模離線資料傳輸?
下一篇:10的負次方的名稱怎么稱呼?
