當(dāng)我們使用top命令查看系統(tǒng)的資源使用情況時(shí)會(huì)看到 load average,如下圖所示。它表示系統(tǒng)在1、5、15分鐘的平均工作負(fù)載。那么什么是負(fù)載(load)呢?它和CPU的利用率又有什么關(guān)系呢?

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