性能分析小案例系列,可以通過下面連結檢視哦
https://www.cnblogs.com/poloyy/category/1814570.html
在做性能測試時,我們會需要對 Linux 系統的性能名額進行分析
這一篇就來講下 CPU 性能名額的一個整體分析思路流程
總結出一個“又快又準”的瓶頸定位套路,在不同場景下,名額工具怎麼選,性能瓶頸怎麼找
一共有四個需要掌握了解的性能名額
最常見的一個性能名額
描述了非空閑時間占總 CPU 時間的百分比
根據 CPU 上運作任務的不同,又被分為:使用者 CPU、系統 CPU、等待 I/O CPU、軟中斷、硬中斷
表示 CPU 在使用者态運作的時間百分比
包括:使用者态的 CPU 使用率(user)和低優先級的使用者态 CPU 使用率(nice)
使用者 CPU 使用率高,說明有應用程式比較繁忙
表示 CPU 在核心态運作的時間百分比(不包括中斷)
系統 CPU 使用率高,說明核心比較繁忙
通常也稱為 iowait,表示等待 I/O 的時間百分比
iowait 高,通常說明系統與硬體裝置的 I/O 互動時間比較長
分别表示核心調用軟中斷處理程式、硬中斷處理程式的時間百分比
它們的使用率高,通常說明系統發生了大量的中斷
竊取 CPU 使用率(steal):被其他虛拟機占用的 CPU 時間百分比
客戶 CPU 使 用率(guest):運作客戶虛拟機的 CPU 時間百分比
平均活躍程序數
平均負載等于邏輯 CPU 個數,這表示每個 CPU 都恰好被充分利用
如果平均負載大于邏輯 CPU 個數,就表示負載比較重了
自願上下文切換:無法擷取資源而導緻
非自願上下文切換:被系統強制排程而導緻
CPU 上下文切換本身是保證 Linux 正常運作的一項核心功能
過多的上下文切換,會将運作程序的 CPU 時間,消耗在寄存器、核心棧、虛拟記憶體等資料的儲存和恢複上
最終,縮短程序真正運作的時間,成為性能瓶頸
由于 CPU 發展的速度遠快于記憶體的發展,CPU 的處理速度就比記憶體的通路速度快得多
這樣,CPU 在通路記憶體的時候,免不了要等待記憶體的響應
為了協調這兩者巨大的性能差距,CPU 緩存(通常是多級緩存)就出現了
就像上面這張圖顯示的,CPU 緩存的速度介于 CPU 和記憶體之間,緩存的是熱點的記憶體資料
根據不斷增長的熱點資料,這些緩存按照大小不同分為 L1、L2、L3 等三級緩存,其中 L1 和 L2 常用在單核中, L3 則用在多核中
從 L1 到 L3,三級緩存的大小依次增大,相應的,性能依次降低(當然比記憶體還是好得 多)
而它們的命中率,衡量的是 CPU 緩存的複用情況,命中率越高,則表示性能越好
把性能名額和性能工具聯系起來,下面個将從兩個次元來講這個點
也就是說,當你要檢視某個性能名額時,要清楚知道哪些工具可以做到
總結:哪個工具可以檢視哪些名額
要明确知道這個工具能提供哪些名額
重點!重點!重點!來了!
在實際生産環境中,我們通常都希望盡可能快地定位系統的瓶頸,然後盡可能快地優化性能,也就是要又快又準地解決性能問題
雖然 CPU 的性能名額比較多,但要知道,既然都是描述系統的 CPU 性能,它們就不會是完全孤立的,很多名額間都有一定的關聯
想弄清楚性能名額的關聯性,就要通曉每種性能名額的工作原理
使用者 CPU 使用率(us)高,應該去排查程序的使用者态而不是核心态,因為使用者 CPU 使用率反映的就是使用者态的 CPU 使用情況
而核心态的 CPU 使用情況隻會反映到系統 CPU 使用率(sy)上
列出了 top、vmstat 和 pidstat 分别提供的重要的 CPU 名額,并用虛線表示關聯關系,對應出了性能分析下一步的方向
下面舉些小栗子
top 看到使用者态 CPU 使用率偏高
可以根據 pidstat 的輸出進一步觀察是否是某個程序導緻的問題
找出 CPU 使用率偏高的程序之後就要用程序分析工具來分析程序的行為
比如使用 strace 分析系統調用情況,perf 分析調用鍊中各級函數的執行情況
top 看到平均負載升高
通過 vmstat 檢視 R 狀态和 B 狀态的程序數,是否有數量上的異常
如果不可中斷狀态的程序數過多,需要做 I/O 的分析,可以通過 dstat 或 sar 工具來分析 I/O
如果是運作狀态的程序數過多,可以通過 pidstat 确認處于運作狀态的程序,然後用程序分析工具做進一步分析
top 看到軟中斷 CPU 使用率(si)偏高,程序清單能看到軟中斷程序 CPU 使用率也偏高
可以根據讀取 /proc/softirqs 檢視軟中斷類型和變化頻率
如果是網絡相關軟中斷導緻的問題,可以進一步通過網絡分析工具 sar、tcpdump 來分析