1. 程式人生 > >效能分析(6)- 如何迅速分析出系統 CPU 的瓶頸在哪裡

效能分析(6)- 如何迅速分析出系統 CPU 的瓶頸在哪裡

效能分析小案例系列,可以通過下面連結檢視哦

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 指標,並用虛線表示關聯關係,對應出了效能分析下一步的方向

下面舉些小栗子

 

栗子一

  1. top 看到使用者態 CPU 使用率偏高
  2. 可以根據 pidstat 的輸出進一步觀察是否是某個程序導致的問題
  3. 找出 CPU 使用率偏高的程序之後就要用程序分析工具來分析程序的行為
  4. 比如使用 strace 分析系統呼叫情況,perf 分析呼叫鏈中各級函式的執行情況

 

栗子二

  1. top 看到平均負載升高
  2. 通過 vmstat 檢視 R 狀態和 B 狀態的程序數,是否有數量上的異常
  3. 如果不可中斷狀態的程序數過多,需要做 I/O 的分析,可以通過 dstat 或 sar 工具來分析 I/O
  4. 如果是執行狀態的程序數過多,可以通過 pidstat 確認處於執行狀態的程序,然後用程序分析工具做進一步分析

 

栗子三

  1. top 看到軟中斷 CPU 使用率(si)偏高,程序列表能看到軟中斷程序 CPU 使用率也偏高
  2. 可以根據讀取 /proc/softirqs 檢視軟中斷型別和變化頻率
  3. 如果是網路相關軟中斷導致的問題,可以進一步通過網路分析工具 sar、tcpdump 來分析