不懂CPU性能分析?這份性能分析指南請收好
在前面的幾篇案例分析文章中,我們通過多個案例、從不同角度、使用不同的性能工具分析了CPU性能問題,今天我們就來總結(jié)下,怎么能又快又準的定位到問題。要回答好這個問題,我們就需要明白影響CPU的指標有哪些?又有哪些工具可以獲取到指標數(shù)據(jù),這些數(shù)據(jù)的合理值是什么?讓我們一起把這幾個問題搞明白。
CPU性能指標
1、CPU使用率:
- 用戶CPU (us): 用戶態(tài)運行的時間百分比,使用率越高,說明有應用程序比較繁忙。
- 系統(tǒng)CPU (sy): 內(nèi)核態(tài)運行的時間百分比,使用率越高,說明內(nèi)核越繁忙。
- 等待CPU (wa): 通常也稱為 iowait,表示等待 I/O 的時間百分比,使用率高,說明系統(tǒng)與硬件設備的I/O交互時間比較長
- 軟中斷CPU (si): 處理軟中斷時間百分比,大量的中斷也會導致CPU的使用率升高。比如前面分析的大量的小網(wǎng)絡包導致頻繁的硬中斷和軟中斷。
- 硬中斷CPU (hi): 處理硬中斷時間百分比。硬中斷是硬件觸發(fā),執(zhí)行速度很快,使用率高的話,大部分是硬件故障導致。
- 空閑CPU (id): 代表空閑時間百分比。越高反而說明壓力越小
- 低優(yōu)先級 (ni): 低優(yōu)先級用戶態(tài)CPU時間百分比,nice可取值范圍是-20到19,數(shù)值越大,優(yōu)先級反而越低,默認值是0。
- steal (st): 代表當系統(tǒng)運行在虛擬機中的時候,虛擬機占用的CPU時間。
- guest: 代表通過虛擬化運行其他操作系統(tǒng)的時間,也就是運行虛擬機的CPU時間。
2、上下文切換
- 上下文切換分為進程上下文切換、線程上下文切換。線程上下文切換的代價是遠遠高于線程上下文切換的,因為涉及到虛擬內(nèi)存、棧、全局變量等資源的加載,而線程的虛擬內(nèi)存是共享的,就會快很多。
- 上下文切換中自愿上下文切換、非自愿上下文切換是我們關(guān)注的重點。
3、平均負載
- 概念:系統(tǒng)處于可運行狀態(tài)和不可中斷狀態(tài)的平均進程數(shù),也就是平均活躍進程數(shù)。這里提到的進程狀態(tài)也是我們關(guān)注的重點。比如僵尸進程、不可中斷進程。
- 每個進程都可以得到cpu時間片是最完美的,所以平均負載高于CPU核心數(shù)就說明存在過載的情況了。
4、CPU緩存
- 這取決于CPU型號的具體指標。越大越說明CPU的性能表現(xiàn)越出色。
觀測工具
我們知道了CPU的核心性能指標,如果能理解每個指標對應的工具的特性,一定更高效、更靈活,下面是我整理的性能指標對應的查詢工具表格,方便我們?nèi)ビ^測這些指標。
分析CPU性能問題思路
分析CPU性能問題時,可以采用從全局到局部的方法,先從整體去看CPU的使用情況,縮小排查范圍,在性能工具選擇上,使用支持指標較多的工具,這樣可以一次看到更多的指標,可以通過以下步驟快速定位。
- 使用top命令可以得到檢查CPU的總體情況。top命令可以看到的指標是比較多的,也很直觀。
- 使用vmstat可以得到上下文切換次數(shù)、中斷次數(shù)、運行狀態(tài)和不可中斷狀態(tài)的進程數(shù)。
- 使用pidstat可以得到進程的用戶CPU使用率、系統(tǒng) CPU 使用率、以及自愿上下文切換和非自愿上下文切換情況。
通過上面的一些列檢查,我們大致可以把問題縮小到具體的進程或者線程級別,在通過相關(guān)的分析工具進一步分析,找到影響性能的罪魁禍首就水到渠成了。