優(yōu)質(zhì)博文:IT-BLOG-CN
一、CPU 使用率
CPU
使用率是 CPU
處理非空閑任務(wù)所花費(fèi)的時(shí)間百分比 。例如單核CPU 1s
內(nèi)非空閑態(tài)運(yùn)行時(shí)間為0.8s
,那么它的CPU
使用率就是80%
;雙核CPU 1s
內(nèi)非空閑態(tài)運(yùn)行時(shí)間分別為0.4s
和0.6s
,那么,總體CPU
使用率就是(0.4s + 0.6s) / (1s * 2) = 50%
,其中2
表示CPU
核數(shù),多核CPU
同理。CPU
使用率只能在指定的時(shí)間間隔內(nèi)測(cè)量。我們可以通過(guò)將空閑時(shí)間的百分比從100
中減去來(lái)確定CPU
使用率。
在
Linux
中,進(jìn)程分為三種狀態(tài),一種是阻塞的進(jìn)程blocked process
,一種是可運(yùn)行的進(jìn)程runnable process
,另外就是正在運(yùn)行的進(jìn)程running process
。
使用率這個(gè)要結(jié)合時(shí)間片來(lái)說(shuō),從上圖的演變可以看出影響使用率高低的因素不是load
的多少,而是在分配給某個(gè)進(jìn)程時(shí)間片時(shí),這個(gè)進(jìn)程是否使用了CPU
的計(jì)算能力。在第四分鐘時(shí)候,分配給藍(lán)人1
分鐘,但是它什么也沒(méi)干,這1
分鐘內(nèi)電話是閑置的沒(méi)有被使用,所以這一分鐘內(nèi)的電話使用率就是0%
。但是load
是3
。
當(dāng)然這里就存在一個(gè)統(tǒng)計(jì)周期的問(wèn)題,上圖我們的統(tǒng)計(jì)周期是1
分鐘,而分配給每個(gè)人的最小時(shí)間單位也是1
分鐘。從計(jì)算機(jī)角度來(lái)說(shuō),單核心CPU
,假設(shè)1
秒鐘分為100
個(gè)時(shí)間片,如果2
個(gè)任務(wù),第一個(gè)任務(wù)用了5
個(gè)時(shí)間片執(zhí)行完成,另外一個(gè)任務(wù)用了15
個(gè)時(shí)間片執(zhí)行完成,所以如果統(tǒng)計(jì)周期是1
秒,那么這1
秒內(nèi)的CPU
使用率就是20%
。CPU
利用率高不一定負(fù)載高,CPU
利用率是一段時(shí)間內(nèi)CPU
被占用的情況。
二、CPU Load
CPU
負(fù)載定義為在單個(gè)時(shí)間點(diǎn)使用或等待使用一個(gè)內(nèi)核的進(jìn)程數(shù)。在單核系統(tǒng),我們的CPU
平均負(fù)載始終低于0.7
。這表明每個(gè)需要使用CPU
的進(jìn)程都可以立即使用它,而無(wú)需等待。如果CPU
平均負(fù)載大于1
,則表示有進(jìn)程需要使用CPU
,但由于CPU
不可用,目前無(wú)法使用。在多處理器系統(tǒng)中高于1
的平均負(fù)載不會(huì)成為問(wèn)題,因?yàn)橛懈鄡?nèi)核可用。
上圖的電話亭可以理解為一個(gè)CPU
核心。從上圖的過(guò)程中可以看到load
的概念,而使用率始終100%
。
理想的CPU load
是多少:這個(gè)跟你的CPU
核心數(shù)量有關(guān),理想情況下一個(gè)核心被一個(gè)進(jìn)程占用,如果你是4
個(gè)核心,那么跑4
個(gè)進(jìn)程,此時(shí)Load
是4
但是也不高,如果你只有2
個(gè)核心,依然跑4
個(gè)進(jìn)程,這就意味著有一半進(jìn)程在某一個(gè)時(shí)刻搶不到CPU
,這時(shí)候Load
還是4
,如果是短期狀態(tài)還無(wú)所謂,如果長(zhǎng)期是這個(gè)狀態(tài)你就要注意了。
一般來(lái)說(shuō)只要每個(gè)CPU
的當(dāng)前活動(dòng)進(jìn)程數(shù)不大于3
那么系統(tǒng)的性能就是良好的,如果每個(gè)CPU
的任務(wù)數(shù)大于5
,那么就表示這臺(tái)機(jī)器的性能有嚴(yán)重問(wèn)題。
三、CPU 使用率和負(fù)載常用命令
top命令查看CPU使用率
通常,top
命令通常用于顯示系統(tǒng)上的活動(dòng)進(jìn)程以及這些進(jìn)程消耗了多少資源。不過(guò),我們可以使用這個(gè)命令來(lái)測(cè)量CPU
的狀態(tài):
[root@localhost ~]# top
top - 07:08:31 up 2:41, 1 user, load average: 1.09, 1.11, 1.30
Tasks: 322 total, 2 running, 320 sleeping, 0 stopped, 0 zombie
%Cpu(s): 10.0 us, 15.0 sy, 0.0 ni, 97.8 id, 0.0 wa, 5.0 hi, 0.0 si, 0.0 st
MiB Mem : 3709.4 total, 1483.1 free, 1402.0 used, 824.4 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 2053.4 avail Mem
參數(shù)說(shuō)明:
【1】us(user)
:表示CPU
在用戶態(tài)運(yùn)行的時(shí)間百分比,通常用戶態(tài)CPU
高表示有應(yīng)用程序比較繁忙。典型的用戶態(tài)程序包括:數(shù)據(jù)庫(kù)、Web
服務(wù)器等;
【2】sy(sys)
:表示CPU
在內(nèi)核態(tài)運(yùn)行的時(shí)間百分比(不包括中斷),通常內(nèi)核態(tài)CPU
越低越好,否則表示系統(tǒng)存在某些瓶頸;
【3】ni(nice)
:表示用nice
修正進(jìn)程優(yōu)先級(jí)的用戶態(tài)進(jìn)程執(zhí)行的CPU
時(shí)間。nice
是一個(gè)進(jìn)程優(yōu)先級(jí)的修正值,如果進(jìn)程通過(guò)它修改了優(yōu)先級(jí),則會(huì)單獨(dú)統(tǒng)計(jì)CPU
開銷;
【4】id(idle)
:表示CPU
處于空閑態(tài)的時(shí)間占比,此時(shí),CPU
會(huì)執(zhí)行一個(gè)特定的虛擬進(jìn)程,名為System Idle Process
空閑時(shí)間;
【5】wa(iowait)
:表示CPU
在等待I/O
操作完成所花費(fèi)的時(shí)間,通常該指標(biāo)越低越好,否則表示I/O
存在瓶頸,可以用iostat
等命令做進(jìn)一步分析;
【6】hi(hardirq)
:表示CPU
處理硬中斷所花費(fèi)的時(shí)間。硬中斷是由外設(shè)硬件(如鍵盤控制器、硬件傳感器等)發(fā)出的,需要有中斷控制器參與,特點(diǎn)是快速執(zhí)行;
【7】si(softirq)
:表示CPU
處理軟中斷所花費(fèi)的時(shí)間。軟中斷是由軟件程序(如網(wǎng)絡(luò)收發(fā)、定時(shí)調(diào)度等)發(fā)出的中斷信號(hào),特點(diǎn)是延遲執(zhí)行;
【8】st(steal)
:表示CPU
被其他虛擬機(jī)占用的時(shí)間,僅出現(xiàn)在多虛擬機(jī)場(chǎng)景。如果該指標(biāo)過(guò)高,可以檢查下宿主機(jī)或其他虛擬機(jī)是否異常;
【9】load average
:表示CPU
的平均負(fù)載,這3
個(gè)數(shù)字分別表示1
分鐘、5
分鐘、15
分鐘內(nèi)系統(tǒng)的平均負(fù)載。該值越小,表示系統(tǒng)工作量越少,負(fù)荷越低;反之負(fù)荷越高;
平均負(fù)載Load Average
:指單位時(shí)間內(nèi),系統(tǒng)處于可運(yùn)行狀態(tài)(Running / Runnable)和不可中斷態(tài)的平均進(jìn)程數(shù),也就是平均活躍進(jìn)程數(shù)。
可運(yùn)行態(tài)進(jìn)程包括正在使用CPU
或者等待CPU
的進(jìn)程;不可中斷態(tài)進(jìn)程是指處于內(nèi)核態(tài)關(guān)鍵流程中的進(jìn)程,并且該流程不可被打斷。比如當(dāng)進(jìn)程向磁盤寫數(shù)據(jù)時(shí),如果被打斷,就可能出現(xiàn)磁盤數(shù)據(jù)與進(jìn)程數(shù)據(jù)不一致。不可中斷態(tài),本質(zhì)上是系統(tǒng)對(duì)進(jìn)程和硬件設(shè)備的一種保護(hù)機(jī)制。
理想情況下,每個(gè)CPU
應(yīng)該滿負(fù)荷工作,并且沒(méi)有等待進(jìn)程,此時(shí),平均負(fù)載 = CPU
邏輯核數(shù)。但是,在實(shí)際生產(chǎn)系統(tǒng)中,不建議系統(tǒng)滿負(fù)荷運(yùn)行。通用的經(jīng)驗(yàn)法則是:平均負(fù)載 = 0.7 * CPU
邏輯核數(shù)。
1、當(dāng)平均負(fù)載持續(xù)大于0.7 * CPU
邏輯核數(shù),就需要開始調(diào)查原因,防止系統(tǒng)惡化;
2、當(dāng)平均負(fù)載持續(xù)大于1.0 * CPU
邏輯核數(shù),必須尋找解決辦法,降低平均負(fù)載;
3、當(dāng)平均負(fù)載持續(xù)大于5.0 * CPU
邏輯核數(shù),表明系統(tǒng)已出現(xiàn)嚴(yán)重問(wèn)題,長(zhǎng)時(shí)間未響應(yīng),或者接近死機(jī)。
除了關(guān)注平均負(fù)載值本身,也應(yīng)關(guān)注平均負(fù)載的變化趨勢(shì),這包含兩層含義。一是load1
、load5
、load15
之間的變化趨勢(shì);二是歷史的變化趨勢(shì)。
1、當(dāng)load1
、load5
、load15
三個(gè)值非常接近,表明短期內(nèi)系統(tǒng)負(fù)載比較平穩(wěn)。此時(shí),應(yīng)該將其與昨天或上周同時(shí)段的歷史負(fù)載進(jìn)行比對(duì),觀察是否有顯著上升。
2、當(dāng)load1
遠(yuǎn)小于load5
或load15
時(shí),表明系統(tǒng)最近1
分鐘的負(fù)載在降低,而過(guò)去5
分鐘或15
分鐘的平均負(fù)載卻很高。
3、當(dāng)load1
遠(yuǎn)大于load5
或load15
時(shí),表明系統(tǒng)負(fù)載在急劇升高,如果不是臨時(shí)性抖動(dòng),而是持續(xù)升高,特別是當(dāng)load5
都已超過(guò)0.7 * CPU
邏輯核數(shù)時(shí),應(yīng)調(diào)查原因,降低系統(tǒng)負(fù)載。
如果1
個(gè)CPU
的系統(tǒng)平均負(fù)載=1.7
:如果CPU
每分鐘最多處理100
個(gè)進(jìn)程,意味著除了CPU
正在處理的100
個(gè)進(jìn)程以外,還有70
個(gè)進(jìn)程正排隊(duì)等著CPU
處理。2
個(gè)CPU
表明系統(tǒng)負(fù)荷可以達(dá)到2.0
。
此外,需要注意的是,top
命令顯示了單個(gè)內(nèi)核的CPU
百分比。在多處理器系統(tǒng)中,CPU
百分比可能超過(guò)100%
。例如,如果4
個(gè)核心為75%
,top
命令將顯示CPU
為300%
。由于CPU
有多種非空閑態(tài),因此,CPU
使用率計(jì)算公式可以總結(jié)為:CPU
使用率 = (1 - 空閑態(tài)運(yùn)行時(shí)間/總運(yùn)行時(shí)間) * 100%。根據(jù)經(jīng)驗(yàn)法則, 建議生產(chǎn)系統(tǒng)的CPU
總使用率不要超過(guò)70%
。
我們需要獲取空閑時(shí)間的值,以便我們可以從100
中減去它來(lái)獲得使用情況:
[root@localhost ~]# top -bn2 | grep '%Cpu' | tail -1 | grep -P '(....|...) id,'|awk '{print "CPU Usage: " 100-$8 "%"}'
CPU Usage: 2.2%
-n
選項(xiàng)是top
命令在結(jié)束前應(yīng)該使用的迭代次數(shù)。我們避免使用第一個(gè)循環(huán),因?yàn)槲覀儥z索的指標(biāo)將是自啟動(dòng)以來(lái)的值。因此,我們進(jìn)行了第二次迭代?;蛘?,在多處理器系統(tǒng)中,我們必須將給定的id
值除以內(nèi)核數(shù),然后從100
中減去該值。例如,如果我們?cè)谒暮讼到y(tǒng)上運(yùn)行,并且id
值為304%
,我們將CPU
使用率計(jì)算為:
CPU 使用率 % = 100 – (304/4)
[root@localhost ~]# top -bn2 | grep '%Cpu' | tail -1 | grep -P '(....|...) id,'|awk '{print "CPU Usage: " 100-($8/4) "%"}'
vmstat命令查看CPU的使用率
[root@localhost ~]# vmstat 3 4
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 0 1347080 6120 941464 0 0 68 11 72 137 1 2 97 0 0
1 0 0 1347080 6120 941464 0 0 0 0 84 157 1 2 97 0 0
1 0 0 1347080 6120 941464 0 0 0 0 59 107 1 1 98 0 0
1 0 0 1347080 6120 941464 0 0 0 1 59 104 1 1 98 0 0
id
列是我們感興趣的。延遲一秒,我們使用vmstat
計(jì)算CPU
使用率:
[root@localhost ~]# echo "CPU Usage: "$[100-$(vmstat 1 2|tail -1|awk '{print $15}')]"%"
CPU Usage: 2%
沒(méi)有提供任何參數(shù)的vmstat
命令將給出自引導(dǎo)以來(lái)的CPU
時(shí)間。這不會(huì)提供準(zhǔn)確的CPU
使用百分比。因此,參數(shù)只能是1
和2
,我們采用一秒鐘后計(jì)算的指標(biāo):
vmstat 1 2
/proc/stat命令查看CPU使用率
CPU
活動(dòng)也可以從/proc/stat
文件中提取。該文件包含自啟動(dòng)以來(lái)有關(guān)系統(tǒng)的各種指標(biāo):
[root@localhost ~]# cat /proc/stat
cpu 3020 28 1863 22404 35 432 47 0 0 0
cpu0 3020 28 1863 22404 35 432 47 0 0 0
intr 96468 28 100 0 0 0 0 0 0 1 0 0 0 1263 0 0 0 3696 0 153 928 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 207 0 41 14600 0 0 0 0 0 0 0 0 0 0 0 0 0 0 343 97 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 340950
btime 1628404433
processes 3276
procs_running 2
procs_blocked 0
softirq 112867 1 16857 56 269 510 0 261 0 0 94913
第一行,cpu
是系統(tǒng)所有核心指標(biāo)的聚合。在具有4
個(gè)內(nèi)核的系統(tǒng)上,將有4
條cpu
線——cpu0
、cpu1
、cpu2
和cpu3
。cpu
行中的列表示處理不同任務(wù)所花費(fèi)的時(shí)間:
【1】user
在用戶模式下花費(fèi)的時(shí)間;
【2】nice
在用戶模式下處理 nice 進(jìn)程所花費(fèi)的時(shí)間;
【3】system
執(zhí)行內(nèi)核代碼所花費(fèi)的時(shí)間;
【4】idl
空閑時(shí)間;
【5】iowait
等待I/O
所花費(fèi)的時(shí)間;
【6】irq
服務(wù)中斷所花費(fèi)的時(shí)間;
【7】softirq
服務(wù)軟件中斷所花費(fèi)的時(shí)間;
【8】steal
從虛擬機(jī)中竊取的時(shí)間;
【9】guest
為來(lái)賓操作系統(tǒng)運(yùn)行虛擬CPU
所花費(fèi)的時(shí)間;
【10】guest_nice
為“不錯(cuò)的”客戶操作系統(tǒng)運(yùn)行虛擬CPU
所花費(fèi)的時(shí)間;
我們將使用這些指標(biāo)來(lái)計(jì)算平均空閑百分比。隨后,我們將使用計(jì)算值來(lái)計(jì)算CPU
使用率。需要注意的是,較舊的Linux
發(fā)行版不計(jì)算竊取、來(lái)賓或來(lái)賓_nice
指標(biāo)。如果我們使用的是舊系統(tǒng),我們會(huì)在計(jì)算中忽略這些指標(biāo):
平均空閑時(shí)間 (%) = (idle * 100) / (user + nice + system + idle + iowait + irq + softirq +steal + guest + guest_nice)
?
cat /proc/stat |grep cpu |tail -1|awk '{print ($5*100)/($2+$3+$4+$5+$6+$7+$8+$9+$10)}'|awk '{print "CPU Usage: " 100-$1}'
CPU Usage: 2.4219
由于我們正在開發(fā)單核系統(tǒng),因此cpu
行將與cpu1
相同。因此,tail -1
的使用是 只檢索其中一行。然而,我們會(huì)在多處理器系統(tǒng)上使用cpu
行,因?yàn)樗撬袃?nèi)核上的指標(biāo)的集合。
uptime查看平均負(fù)載
uptime
命令為我們提供了以1、5
和15
分鐘為間隔的平均負(fù)載視圖:
[root@localhost ~]# uptime
12:40:05 up 2:29, 1 user, load average: 0.37, 0.08, 0.03
如果不知道系統(tǒng)的核心數(shù),就無(wú)法解釋平均負(fù)載:
[root@localhost ~]# cat /proc/cpuinfo |grep core
core id : 0
cpu cores : 2
四、總結(jié)
CPU
利用率低負(fù)載高: 說(shuō)明等待執(zhí)行的任務(wù)很多,但是通常任務(wù)多CPU
使用率也會(huì)比較高,如果低就說(shuō)明CPU
根本沒(méi)工作,那些很多的任務(wù)處于等待狀態(tài),可能進(jìn)程僵死了。CPU
利用率高負(fù)載低: 說(shuō)明任務(wù)少,但是任務(wù)執(zhí)行時(shí)間長(zhǎng),有可能是程序本身有問(wèn)題,如果沒(méi)有問(wèn)題那么計(jì)算完成后則利用率會(huì)下降。
CPU 使用率與平均負(fù)載的關(guān)系: CPU
使用率是單位時(shí)間內(nèi)CPU
繁忙程度的統(tǒng)計(jì)。平均負(fù)載不僅包括正在使用CPU
的進(jìn)程,還包括等待CPU
或I/O
的進(jìn)程。因此,兩者不能等同,有兩種常見的場(chǎng)景如下所述:
【1】CPU
密集型應(yīng)用,大量進(jìn)程在等待或使用CPU
,此時(shí)CPU
使用率與平均負(fù)載呈正相關(guān)狀態(tài)。
【2】I/O
密集型應(yīng)用,大量進(jìn)程在等待I/O
,此時(shí)平均負(fù)載會(huì)升高,但CPU
使用率不一定很高。
生產(chǎn)CPU
使用率低而平均負(fù)載高的場(chǎng)景: 等待磁盤I/O
完成的進(jìn)程過(guò)多,隊(duì)列長(zhǎng)度大,導(dǎo)致負(fù)載高,但此時(shí)CPU
被分配執(zhí)行別的任務(wù)或空閑,具體如:
【1】磁盤讀寫請(qǐng)求過(guò)多導(dǎo)致大量I/O
等待: CPU
的工作效率要高于磁盤,而進(jìn)程在CPU
上面運(yùn)行需要訪問(wèn)磁盤文件,這個(gè)時(shí)候CPU
會(huì)向內(nèi)核發(fā)起調(diào)用文件的請(qǐng)求,讓內(nèi)核去磁盤取文件,這個(gè)時(shí)候會(huì)切換到其他進(jìn)程或者空閑,這個(gè)任務(wù)就會(huì)轉(zhuǎn)換為不可中斷睡眠狀態(tài)。當(dāng)這種讀寫請(qǐng)求過(guò)多就會(huì)導(dǎo)致不可中斷睡眠狀態(tài)的進(jìn)程過(guò)多,從而導(dǎo)致負(fù)載高,CPU
低的情況。
【2】數(shù)據(jù)庫(kù)抖動(dòng): 造成線程隊(duì)列hang
住,負(fù)載升高。
【3】外接硬盤故障: 常見有掛了NFS
,但是NFS server
故障了。比如系統(tǒng)掛載了外接硬盤如NFS
共享存儲(chǔ),經(jīng)常會(huì)有大量的讀寫請(qǐng)求去訪問(wèn)NFS
存儲(chǔ)的文件,如果這個(gè)時(shí)候NFS Server
故障,那么就會(huì)導(dǎo)致進(jìn)程讀寫請(qǐng)求一直獲取不到資源,從而進(jìn)程一直是不可中斷狀態(tài),造成負(fù)載很高。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-768854.html
Reference:
CPU load 過(guò)高問(wèn)題排查
CPU 如何正確理解 CPU 使用率和平均負(fù)載的關(guān)系?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-768854.html
到了這里,關(guān)于CPU 使用率和負(fù)載Load的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!