perf查看CPU占用高分析
1. 首先看一下英文給出的解釋
Performance analysis tools for Linux
Performance counters for Linux are a new kernel-based subsystem that provide a framework for all things performance analysis. It covers hardware level (CPU/PMU, Performance Monitoring Unit) features and software features (software counters, tracepoints) as well.
Perf是一款內置於Linux內核源碼樹中的性能剖析工具。
它基於事件采樣原理,以性能事件為基礎,支持針對處理器相關的性能指標和操作系統相關性能指標的性能剖析。常用於性能瓶頸的查找和熱點代碼的定位。
2. 子工具
這里的命令需要用root權限 第3部分會對在ubuntu環境中安裝perf做詳細說明
perf list
查看perf 所支持的性能事件
這里會顯示系統支持性能事件 主要有haedware event/software event/hardware cache event/tracepoint event等等(按enter鍵會顯示更多,按q退出)
perf stat
用於分析指定程序的性能概況
例子: perf list ls //分析命令ls
輸出解釋如下:
cpu-clock:任務真正占用的處理器時間,單位為ms
CPUs utilized = task-clock/time elapsed (CPU的占用率)
context-swichees:程序在運行過程中的上下文切換次數
CPU-migrations:程序在運行過程中發生的處理器遷移次數。Linux為了維持多個處理器的負載均衡在特定條件下會將某個任務從一個CPU遷移到另一個CPU。
CPU遷移和上下文切換:發生上下文切換不一定會發生CPU遷移,而發生CPU遷移時肯定會發生上下文切換。發生上下文切換有可能只是把上下文從當前CPU換出,下一次調度器還是將進程安排在這個CPU上執行。
page-faults:缺失異常的次數。當應用程序請求的頁面尚未建立,請求的頁面不在內存中,或者請求的頁面雖然在內存中,但物理地址和虛擬地址的映射關系尚未建立時,都會觸發一次卻也異常。另外TLB不命中,頁面訪問權限不匹配等情況也會觸發缺頁異常。
cycles:消耗的處理器周期數。如果把被ls使用的cpu cycles看成是一個處理器的,那么它的主頻為2.486GHz。可以用cycles / task-clock算出。
stalled-cycles-frontend:指令讀取或解碼的質量步驟,未能按理想狀態發揮並行左右,發生停滯的時鍾周期。
stalled-cycles-backend:指令執行步驟,發生停滯的時鍾周期。
instructions:執行了多少條指令。IPC為平均每個cpu cycle執行了多少條指令。
branches:遇到的分支指令數。branch-misses是預測錯誤的分支指令數。
perf top
對於一個指定的性能事件(默認是CPU周期)顯示消耗最多的函數/命令
結果顯示說明:
第一列:符號引發的性能事件的比例,默認指占用CPU周期的比例
第二列:符號所在的DSO(Dynanic Shared Object)可以是應用程序、內核、動態鏈接庫、模塊。
第三列:DSO的類型,[,]表示此符號屬於用戶態的ELF文件,包括可執行文件與動態鏈接庫。[k]表示此符號屬於內核或模塊。
第四列:符號名。有些符號不能解析為函數名,只能用地址表示。
perf record
收集采樣信息,並將其記錄在數據文件中,隨后可以用perf report對數據文件進行分析
例子:
執行此命令之后當前文件目錄中會生成一個perf.dada的文件,即是監控的結果。
perf report
讀取perf record創建的文件,並給出熱點分析結果
例子:
perf report -i perf.data //-i表示文件輸入
3.安裝perf
安裝內核源碼
yum install linux-source
執行之后可以在文件目錄、usr/src下找到src。解壓之后進入tools/perf,.然后執行
注意:需要root賬戶執行此命令
之后就可以在任意目錄執行perf相關命令了。
4.更多
除了以上5個常用工具外,還有一些適用於較特殊場景的工具, 比如內核鎖、slab分配器、調度器,也支持自定義探測點。(這里不做詳細闡述)
參考:
https://blog.csdn.net/lin443514407lin/article/details/70989879
https://www.cnblogs.com/arnoldlu/p/6241297.html
————————————————
轉自
版權聲明:本文為CSDN博主「wychen_sunshine」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u012679583/article/details/82349364