效能分析(6)- 如何迅速分析出系統 CPU 的瓶頸在哪裡
阿新 • • 發佈:2020-08-12
效能分析小案例系列,可以通過下面連結檢視哦
https://www.cnblogs.com/poloyy/category/1814570.html
前言
- 在做效能測試時,我們會需要對 Linux 系統的效能指標進行分析
- 這一篇就來講下 CPU 效能指標的一個整體分析思路流程
- 總結出一個“又快又準”的瓶頸定位套路,在不同場景下,指標工具怎麼選,效能瓶頸怎麼找
CPU 效能指標
一共有四個需要掌握瞭解的效能指標
CPU 使用率
再次總結
- 最常見的一個性能指標
- 描述了非空閒時間佔總 CPU 時間的百分比
- 根據 CPU 上執行任務的不同,又被分為:使用者 CPU、系統 CPU、等待 I/O CPU、軟中斷、硬中斷
使用者 CPU 使用率
- 表示 CPU 在使用者態執行的時間百分比
- 包括:使用者態的 CPU 使用率(user)和低優先順序的使用者態 CPU 使用率(nice)
- 使用者 CPU 使用率高,說明有應用程式比較繁忙
系統 CPU 使用率
- 表示 CPU 在核心態執行的時間百分比(不包括中斷)
- 系統 CPU 使用率高,說明核心比較繁忙
等待 I/O 的 CPU 使用率
- 通常也稱為 iowait,表示等待 I/O 的時間百分比
- iowait 高,通常說明系統與硬體裝置的 I/O 互動時間比較長
軟中斷和硬中斷的 CPU 使用率
- 分別表示核心呼叫軟中斷處理程式、硬中斷處理程式的時間百分比
- 它們的使用率高,通常說明系統發生了大量的中斷
虛擬化環境
- 竊取 CPU 使用率(steal):被其他虛擬機器佔用的 CPU 時間百分比
- 客戶 CPU 使 用率(guest):執行客戶虛擬機器的 CPU 時間百分比
平均負載
平均活躍程序數
理想情況
- 平均負載等於邏輯 CPU 個數,這表示每個 CPU 都恰好被充分利用
- 如果平均負載大於邏輯 CPU 個數,就表示負載比較重了
程序上下文切換
兩種型別
- 自願上下文切換:無法獲取資源而導致
- 非自願上下文切換:被系統強制排程而導致
重點知識
- CPU 上下文切換本身是保證 Linux 正常執行的一項核心功能
- 過多的上下文切換,會將執行程序的 CPU 時間,消耗在暫存器、核心棧、虛擬記憶體等資料的儲存和恢復上
- 最終,縮短程序真正執行的時間,成為效能瓶頸
CPU 快取命中率
為什麼會有快取命中率
- 由於 CPU 發展的速度遠快於記憶體的發展,CPU 的處理速度就比記憶體的訪問速度快得多
- 這樣,CPU 在訪問記憶體的時候,免不了要等待記憶體的響應
- 為了協調這兩者巨大的效能差距,CPU 快取(通常是多級快取)就出現了
- 就像上面這張圖顯示的,CPU 快取的速度介於 CPU 和記憶體之間,快取的是熱點的記憶體資料
- 根據不斷增長的熱點資料,這些快取按照大小不同分為 L1、L2、L3 等三級快取,其中 L1 和 L2 常用在單核中, L3 則用在多核中
- 從 L1 到 L3,三級快取的大小依次增大,相應的,效能依次降低(當然比記憶體還是好得 多)
- 而它們的命中率,衡量的是 CPU 快取的複用情況,命中率越高,則表示效能越好
CPU 效能工具
炒雞重點
把效能指標和效能工具聯絡起來,下面個將從兩個維度來講這個點
第一個維度:從 CPU 的效能指標出發
- 也就是說,當你要檢視某個效能指標時,要清楚知道哪些工具可以做到
- 總結:哪個工具可以檢視哪些指標
第二個維度:從工具觸發
要明確知道這個工具能提供哪些指標
重點!重點!重點!來了!
如何快速分析 CPU 的效能瓶頸
在實際生產環境中,我們通常都希望儘可能快地定位系統的瓶頸,然後儘可能快地優化效能,也就是要又快又準地解決效能問題
認知
- 雖然 CPU 的效能指標比較多,但要知道,既然都是描述系統的 CPU 效能,它們就不會是完全孤立的,很多指標間都有一定的關聯
- 想弄清楚效能指標的關聯性,就要通曉每種效能指標的工作原理
舉個栗子
- 使用者 CPU 使用率(us)高,應該去排查程序的使用者態而不是核心態,因為使用者 CPU 使用率反映的就是使用者態的 CPU 使用情況
- 而核心態的 CPU 使用情況只會反映到系統 CPU 使用率(sy)上
CPU 使用率高的場景,如何進行一系列的效能分析
列出了 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 來分析