不懂CPU性能分析?這份性能分析指南請(qǐng)收好

在前面的幾篇案例分析文章中,我們通過多個(gè)案例、從不同角度、使用不同的性能工具分析了CPU性能問題,今天我們就來總結(jié)下,怎么能又快又準(zhǔn)的定位到問題。要回答好這個(gè)問題,我們就需要明白影響CPU的指標(biāo)有哪些?又有哪些工具可以獲取到指標(biāo)數(shù)據(jù),這些數(shù)據(jù)的合理值是什么?讓我們一起把這幾個(gè)問題搞明白。
CPU性能指標(biāo)

1、CPU使用率:
- 用戶CPU (us): 用戶態(tài)運(yùn)行的時(shí)間百分比,使用率越高,說明有應(yīng)用程序比較繁忙。
- 系統(tǒng)CPU (sy): 內(nèi)核態(tài)運(yùn)行的時(shí)間百分比,使用率越高,說明內(nèi)核越繁忙。
- 等待CPU (wa): 通常也稱為 iowait,表示等待 I/O 的時(shí)間百分比,使用率高,說明系統(tǒng)與硬件設(shè)備的I/O交互時(shí)間比較長
- 軟中斷CPU (si): 處理軟中斷時(shí)間百分比,大量的中斷也會(huì)導(dǎo)致CPU的使用率升高。比如前面分析的大量的小網(wǎng)絡(luò)包導(dǎo)致頻繁的硬中斷和軟中斷。
- 硬中斷CPU (hi): 處理硬中斷時(shí)間百分比。硬中斷是硬件觸發(fā),執(zhí)行速度很快,使用率高的話,大部分是硬件故障導(dǎo)致。
- 空閑CPU (id): 代表空閑時(shí)間百分比。越高反而說明壓力越小
- 低優(yōu)先級(jí) (ni): 低優(yōu)先級(jí)用戶態(tài)CPU時(shí)間百分比,nice可取值范圍是-20到19,數(shù)值越大,優(yōu)先級(jí)反而越低,默認(rèn)值是0。
- steal (st): 代表當(dāng)系統(tǒng)運(yùn)行在虛擬機(jī)中的時(shí)候,虛擬機(jī)占用的CPU時(shí)間。
- guest: 代表通過虛擬化運(yùn)行其他操作系統(tǒng)的時(shí)間,也就是運(yùn)行虛擬機(jī)的CPU時(shí)間。
2、上下文切換
- 上下文切換分為進(jìn)程上下文切換、線程上下文切換。線程上下文切換的代價(jià)是遠(yuǎn)遠(yuǎn)高于線程上下文切換的,因?yàn)樯婕暗教摂M內(nèi)存、棧、全局變量等資源的加載,而線程的虛擬內(nèi)存是共享的,就會(huì)快很多。
- 上下文切換中自愿上下文切換、非自愿上下文切換是我們關(guān)注的重點(diǎn)。
3、平均負(fù)載
- 概念:系統(tǒng)處于可運(yùn)行狀態(tài)和不可中斷狀態(tài)的平均進(jìn)程數(shù),也就是平均活躍進(jìn)程數(shù)。這里提到的進(jìn)程狀態(tài)也是我們關(guān)注的重點(diǎn)。比如僵尸進(jìn)程、不可中斷進(jìn)程。
- 每個(gè)進(jìn)程都可以得到cpu時(shí)間片是最完美的,所以平均負(fù)載高于CPU核心數(shù)就說明存在過載的情況了。
4、CPU緩存
- 這取決于CPU型號(hào)的具體指標(biāo)。越大越說明CPU的性能表現(xiàn)越出色。
觀測工具
我們知道了CPU的核心性能指標(biāo),如果能理解每個(gè)指標(biāo)對(duì)應(yīng)的工具的特性,一定更高效、更靈活,下面是我整理的性能指標(biāo)對(duì)應(yīng)的查詢工具表格,方便我們?nèi)ビ^測這些指標(biāo)。

分析CPU性能問題思路
分析CPU性能問題時(shí),可以采用從全局到局部的方法,先從整體去看CPU的使用情況,縮小排查范圍,在性能工具選擇上,使用支持指標(biāo)較多的工具,這樣可以一次看到更多的指標(biāo),可以通過以下步驟快速定位。
- 使用top命令可以得到檢查CPU的總體情況。top命令可以看到的指標(biāo)是比較多的,也很直觀。
- 使用vmstat可以得到上下文切換次數(shù)、中斷次數(shù)、運(yùn)行狀態(tài)和不可中斷狀態(tài)的進(jìn)程數(shù)。
- 使用pidstat可以得到進(jìn)程的用戶CPU使用率、系統(tǒng) CPU 使用率、以及自愿上下文切換和非自愿上下文切換情況。
通過上面的一些列檢查,我們大致可以把問題縮小到具體的進(jìn)程或者線程級(jí)別,在通過相關(guān)的分析工具進(jìn)一步分析,找到影響性能的罪魁禍?zhǔn)拙退角闪恕?/p>





























