Linux下CPU使用率與機(jī)器負(fù)載的關(guān)系與區(qū)別
當(dāng)我們使用top命令查看系統(tǒng)的資源使用情況時會看到 load average,如下圖所示。它表示系統(tǒng)在1、5、15分鐘的平均工作負(fù)載。那什么是負(fù)載(load)呢?它和CPU的利用率又有什么關(guān)系呢?
load average: 系統(tǒng)平均負(fù)載是CPU的Load,它所包含的信息不是CPU的使用率狀況,而是在一段時間內(nèi)CPU正在處理以及等待CPU處理的進(jìn)程數(shù)之和的統(tǒng)計信息,也就是CPU使用隊(duì)列的長度的統(tǒng)計信息。這個數(shù)字越小越好。
01、CPU負(fù)載和CPU利用率的區(qū)別
CPU利用率:顯示的是程序在運(yùn)行期間實(shí)時占用的CPU百分比
CPU負(fù)載:顯示的是一段時間內(nèi)正在使用和等待使用CPU的平均任務(wù)數(shù)。CPU利用率高,并不意味著負(fù)載就一定大。舉例來說:如果我有一個程序它需要一直使用CPU的運(yùn)算功能,那么此時CPU的使用率可能達(dá)到100%,但是CPU的工作負(fù)載則是趨近于“1”,因?yàn)镃PU僅負(fù)責(zé)一個工作嘛!如果同時執(zhí)行這樣的程序兩個呢?CPU的使用率還是100%,但是工作負(fù)載則變成2了。所以也就是說,當(dāng)CPU的工作負(fù)載越大,代表CPU必須要在不同的工作之間進(jìn)行頻繁的工作切換。
舉例說明:
網(wǎng)上有篇文章舉了一個有趣比喻,拿打電話來說明兩者的區(qū)別,我按自己的理解闡述一下。
某公用電話亭,有一個人在打電話,四個人在等待,每人限定使用電話一分鐘,若有人一分鐘之內(nèi)沒有打完電話,只能掛掉電話去排隊(duì),等待下一輪。電話在這里就相當(dāng)于CPU,而正在或等待打電話的人就相當(dāng)于任務(wù)數(shù)。
在電話亭使用過程中,肯定會有人打完電話走掉,有人沒有打完電話而選擇重新排隊(duì),更會有新增的人在這兒排隊(duì),這個人數(shù)的變化就相當(dāng)于任務(wù)數(shù)的增減。為了統(tǒng)計平均負(fù)載情況,我們5分鐘統(tǒng)計一次人數(shù),并在第1、5、15分鐘的時候?qū)y(tǒng)計情況取平均值,從而形成第1、5、15分鐘的平均負(fù)載。
有的人拿起電話就打,一直打完1分鐘,而有的人可能前三十秒在找電話號碼,或者在猶豫要不要打,后三十秒才真正在打電話。如果把電話看作CPU,人數(shù)看作任務(wù),我們就說前一個人(任務(wù))的CPU利用率高,后一個人(任務(wù))的CPU利用率低。
當(dāng)然, CPU并不會在前三十秒工作,后三十秒歇著,只是說,有的程序涉及到大量的計算,所以CPU利用率就高,而有的程序牽涉到計算的部分很少,CPU利用率自然就低。但無論CPU的利用率是高是低,跟后面有多少任務(wù)在排隊(duì)沒有必然關(guān)系。
02、負(fù)載為多少才算比較理想?
這個有爭議,各有各的說法,個人比較贊同CPU負(fù)載小于等于0.5算是一種理想狀態(tài)。
不管某個CPU的性能有多好,1秒鐘能處理多少任務(wù),我們可以認(rèn)為它無關(guān)緊要,雖然事實(shí)并非如此。在評估CPU負(fù)載時,我們只以5分鐘為單位為統(tǒng)計任務(wù)隊(duì)列長度。如果每隔5分鐘統(tǒng)計的時候,發(fā)現(xiàn)任務(wù)隊(duì)列長度都是1,那么CPU負(fù)載就為1。假如我們只有一個單核的CPU,負(fù)載一直為1,意味著沒有任務(wù)在排隊(duì),還不錯。
但是我那臺服務(wù)器,是雙核又CPU,等于是有4個內(nèi)核,每個內(nèi)核的負(fù)載為1的話,總負(fù)載為4。這就是說,如果我那臺服務(wù)器的CPU負(fù)載長期保持在4左右,還可以接受。
但是每個內(nèi)核的負(fù)載為1,并不能算是一種理想狀態(tài)!這意味著我們的CPU一直很忙,不得清閑。網(wǎng)上有說理想的狀態(tài)是每個內(nèi)核的負(fù)載為0.7左右,我比較贊同,0.7乘以內(nèi)核數(shù),得出服務(wù)器理想的CPU負(fù)載,比如我這臺服務(wù)器,負(fù)載在3.0以下就可以。
03、如何降低服務(wù)器的CPU負(fù)載?
最簡單辦法的是更換性能更好的服務(wù)器,不要想著僅僅提高CPU的性能,那沒有用,CPU要發(fā)揮出它***的性能還需要其它軟硬件的配合。
在服務(wù)器其它方面配置合理的情況下,CPU數(shù)量和CPU核心數(shù)(即內(nèi)核數(shù))都會影響到CPU負(fù)載,因?yàn)槿蝿?wù)最終是要分配到CPU核心去處理的。兩塊CPU要比一塊CPU好,雙核要比單核好。
因此,我們需要記住,除去CPU性能上的差異,CPU負(fù)載是基于內(nèi)核數(shù)來計算的!有一個說法,“有多少內(nèi)核,即有多少負(fù)載”。
04、CPU使用率到多少才算比較理想?
CPU利用率在過去常常被我們這些外行認(rèn)為是判斷機(jī)器是否已經(jīng)到了滿負(fù)荷的一個標(biāo)準(zhǔn),我看到長時間CPU使用率60-80%就認(rèn)為機(jī)器有瓶頸出現(xiàn)。