Linux笔记-性能调优工具perf
參考文章:
http://blog.itpub.net/24585765/viewspace-2564885/
https://www.cnblogs.com/fattyCoder/p/10167740.html
Perf (Performance Event)是 Linux 系統(tǒng)原生提供的性能分析工具, 會返回 CPU 正在執(zhí)行的函數(shù)名以及調(diào)用棧
常用命令:
perf record 記錄信息到perf.data;
perf report 生成報告;
perf diff 對兩個記錄進行diff;
perf evlist 列出記錄的性能事件;
perf annotate 顯示perf.data函數(shù)代碼;
perf archive 將相關(guān)符號打包,方便在其它機器進行分析;
perf script 將perf.data輸出可讀性文本;
### 以perf record開始:
perf record -F 99 -a -g -p 1234 -- sleep 30
執(zhí)行完成后生成perf.data文件
參數(shù)解釋
perf record: 收集采樣信息,并將其記錄在數(shù)據(jù)文件中。隨后可通過其它工具對數(shù)據(jù)文件進行分析。
-F 99 :表示采樣頻率99HZ
-a: 表示對所有CPU采樣,如果只需針對特定的CPU,可以使用-C
-g:表示記錄調(diào)用棧
-p 1234 :表示要來分析的程序進程號為1234
sleep 30:表示分析持續(xù)30秒
生成火焰圖:
獲取 FlameGraph組件
git clone https://github.com/brendangregg/FlameGraph.git
cd FlameGraph
根據(jù)perf.data畫圖
perf script > out.perf
./stackcollapse-perf.pl out.perf > out.folded
./flamegraph.pl out.folded > perf_your_name.svg
附錄:
| 序號 | 命令 | 作用 |
|---|---|---|
| 1 | annotate | 解析perf record生成的perf.data文件,顯示被注釋的代碼。 |
| 2 | archive | 根據(jù)數(shù)據(jù)文件記錄的build-id,將所有被采樣到的elf文件打包。利用此壓縮包,可以再任何機器上分析數(shù)據(jù)文件中記錄的采樣數(shù)據(jù)。 |
| 3 | bench | perf中內(nèi)置的benchmark,目前包括兩套針對調(diào)度器和內(nèi)存管理子系統(tǒng)的benchmark。 |
| 4 | buildid-cache | 管理perf的buildid緩存,每個elf文件都有一個獨一無二的buildid。buildid被perf用來關(guān)聯(lián)性能數(shù)據(jù)與elf文件。 |
| 5 | buildid-list | 列出數(shù)據(jù)文件中記錄的所有buildid。 |
| 6 | diff | 對比兩個數(shù)據(jù)文件的差異。能夠給出每個符號(函數(shù))在熱點分析上的具體差異。 |
| 7 | evlist | 列出數(shù)據(jù)文件perf.data中所有性能事件。 |
| 8 | inject | 該工具讀取perf record工具記錄的事件流,并將其定向到標(biāo)準(zhǔn)輸出。在被分析代碼中的任何一點,都可以向事件流中注入其它事件。 |
| 9 | kmem | 針對內(nèi)核內(nèi)存(slab)子系統(tǒng)進行追蹤測量的工具 |
| 10 | kvm | 用來追蹤測試運行在KVM虛擬機上的Guest OS。 |
| 11 | list | 列出當(dāng)前系統(tǒng)支持的所有性能事件。包括硬件性能事件、軟件性能事件以及檢查點。 |
| 12 | lock | 分析內(nèi)核中的鎖信息,包括鎖的爭用情況,等待延遲等。 |
| 13 | mem | 內(nèi)存存取情況 |
| 14 | record | 收集采樣信息,并將其記錄在數(shù)據(jù)文件中。隨后可通過其它工具對數(shù)據(jù)文件進行分析。 |
| 15 | report | 讀取perf record創(chuàng)建的數(shù)據(jù)文件,并給出熱點分析結(jié)果。 |
| 16 | sched | 針對調(diào)度器子系統(tǒng)的分析工具。 |
| 17 | script | 執(zhí)行perl或python寫的功能擴展腳本、生成腳本框架、讀取數(shù)據(jù)文件中的數(shù)據(jù)信息等。 |
| 18 | stat | 執(zhí)行某個命令,收集特定進程的性能概況,包括CPI、Cache丟失率等。 |
| 19 | test | perf對當(dāng)前軟硬件平臺進行健全性測試,可用此工具測試當(dāng)前的軟硬件平臺是否能支持perf的所有功能。 |
| 20 | timechart | 針對測試期間系統(tǒng)行為進行可視化的工具 |
| 21 | top | 類似于linux的top命令,對系統(tǒng)性能進行實時分析。 |
| 22 | trace | 關(guān)于syscall的工具。 |
| 23 | probe | 用于定義動態(tài)檢查點。 |
注:
sudo perf record -F 99 -a -g -p 118521 -- sleep 30
Warning:
PID/TID switch overriding SYSTEMPermission error mapping pages.
Consider increasing /proc/sys/kernel/perf_event_mlock_kb,
or try again with a smaller value of -m/--mmap_pages.
(current value: -1)
sleep: Terminated
增加參數(shù): -m 2后解決
sudo perf record -F 99 -a -g -m 2 -p 118521 -- sleep 30
總結(jié)
以上是生活随笔為你收集整理的Linux笔记-性能调优工具perf的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ceph集群故障运维--持续更新
- 下一篇: 系统级性能分析工具perf的介绍与使用