昨天查看Nagios警報信息,發(fā)現(xiàn)其中一臺服務(wù)器CPU負(fù)載過重,機(jī)器為CentOS系統(tǒng)。信息如下:
2011-2-15 (星期二) 17:50WARNING - load average: 9.73, 10.67, 10.49還有前兩個小時發(fā)出的警報信息:
2011-2-15 (星期二) 16:50WARNING - load average: 10.52, 10.10, 10.062011-2-15 (星期二) 15:40WARNING - load average: 8.27, 9.23, 9.48一、警報信息的三個參數(shù)到底是什么意思?
9.73、10.67、10.49分別代表前一分鐘,五分鐘,十五分鐘的平均CPU負(fù)載,最重要的指標(biāo)是最后一個數(shù)字,即前15分鐘的平均CPU負(fù)載,這個數(shù)字越小越好。所謂CPU負(fù)載指的是一段時間內(nèi)任務(wù)隊列的長度,通俗的講,就是一段時間內(nèi)一共有多少任務(wù)在使用或等待使用CPU。
二、除了Nagios,還有哪些工具可以查看CPU負(fù)載?
可以使用top命令、uptime命令,特別是top命令,功能強(qiáng)大,不僅僅可以用來查看CPU負(fù)載。
三、CPU負(fù)載怎么理解?是不是CPU利用率?
這里要區(qū)別CPU負(fù)載和CPU利用率,它們是不同的兩個概念,但它們的信息可以在同一個top命令中進(jìn)行顯示。CPU利用率顯示的是程序在運(yùn)行期間實時占用的CPU百分比,而CPU負(fù)載顯示的是一段時間內(nèi)正在使用和等待使用CPU的平均任務(wù)數(shù)。CPU利用率高,并不意味著負(fù)載就一定大。網(wǎng)上有篇文章舉了一個有趣比喻,拿打電話來說明兩者的區(qū)別,我按自己的理解闡述一下。
某公用電話亭,有一個人在打電話,四個人在等待,每人限定使用電話一分鐘,若有人一分鐘之內(nèi)沒有打完電話,只能掛掉電話去排隊,等待下一輪。電話在這里就相當(dāng)于CPU,而正在或等待打電話的人就相當(dāng)于任務(wù)數(shù)。
在電話亭使用過程中,肯定會有人打完電話走掉,有人沒有打完電話而選擇重新排隊,更會有新增的人在這兒排隊,這個人數(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ù)在排隊沒有必然關(guān)系。
四、了解了CPU負(fù)載的含義,我們?nèi)绾蝸斫档头⻊?wù)器的CPU負(fù)載呢?
最簡單辦法的是更換性能更好的服務(wù)器,不要想著僅僅提高CPU的性能,那沒有用,CPU要發(fā)揮出它最好的性能還需要其它軟硬件的配合。
在服務(wù)器其它方面配置合理的情況下,CPU數(shù)量和CPU核心數(shù)(即內(nèi)核數(shù))都會影響到CPU負(fù)載,因為任務(wù)最終是要分配到CPU核心去處理的。兩塊CPU要比一塊CPU好,雙核要比單核好。
因此,我們需要記住,除去CPU性能上的差異,CPU負(fù)載是基于內(nèi)核數(shù)來計算的!有一個說法,“有多少內(nèi)核,即有多少負(fù)載”。
五、那么,本文開頭的CPU負(fù)載分擔(dān)到每個CPU上的負(fù)載是多少呢?那就要看我這臺服務(wù)器有一共有多少個內(nèi)核了。
Linux里有一個/proc目錄,存放的是當(dāng)前運(yùn)行系統(tǒng)的虛擬映射,其中有一個文件為cpuinfo,這個文件里存放著CPU的信息。我們可以直接打開查看,或者過濾關(guān)鍵字進(jìn)行查看,因為文件內(nèi)容比較多,所以一般我們需要過濾關(guān)鍵字。
/proc/cpuinfo文件按邏輯CPU而非真實CPU分段落顯示信息,每個邏輯CPU的信息占用一個段落,第一個邏輯CPU標(biāo)識從0開始。我們首先要明白這一點(diǎn),至于什么是邏輯CPU,下面會提到。要理解該文件中的CPU信息,有幾個相關(guān)的概念要知道:
processor:邏輯CPU的標(biāo)識
model name:真實CPU的型號信息
physical id:真實CPU和標(biāo)識
cpu cores:真實CPU的內(nèi)核數(shù)
$>grep ‘model name’ /proc/cpuinfo |uniqmodel name : Intel(R) Xeon(R) CPU E5320 @ 1.86GHz$>grep ‘physical id’ /proc/cpuinfo |sort |uniq |wc -l2$>grep ‘cpu cores’ /proc/cpuinfo |uniq2可以看出,該服務(wù)器CPU型號為Intel(R) Xeon(R) CPU E5320,雙CPU,每個CPU都是雙核,相當(dāng)于服務(wù)器有4個內(nèi)核。
前面我們說CPU負(fù)載是基于CPU內(nèi)核數(shù)計算的,那么以前十五分鐘的平均負(fù)載數(shù)10.49為例,我們可以得出,這臺服務(wù)器每個CPU的負(fù)載為5.245,再分配到內(nèi)核上,每個內(nèi)核的負(fù)載為2.6左右。
這個負(fù)載是否是合理的呢?那就要看理想CPU負(fù)載的標(biāo)準(zhǔn)是什么樣子的了。
六、CPU負(fù)載為多少才算比較理想?
這個有爭議,各有各的說法,我個人比較贊同CPU負(fù)載小于等于0.7算是一種理想狀態(tài)。
不管某個CPU的性能有多好,1秒鐘能處理多少任務(wù),我們可以認(rèn)為它無關(guān)緊要,雖然事實并非如此。在評估CPU負(fù)載時,我們只以5秒鐘為單位為統(tǒng)計任務(wù)隊列長度。如果每隔5秒鐘統(tǒng)計的時候,發(fā)現(xiàn)任務(wù)隊列長度都是1,那么CPU負(fù)載就為1。假如我們只有一個單核的CPU,負(fù)載一直為1,意味著沒有任務(wù)在排隊,還不錯。
上面提到的我那臺服務(wù)器,是雙核又CPU,等于是有4個內(nèi)核,每個內(nèi)核的負(fù)載為1的話,總負(fù)載為4。這就是說,如果我那臺服務(wù)器的CPU負(fù)載長期保持在4左右,還可以接受。但實際上CPU負(fù)載已經(jīng)達(dá)到9以上了,所以就很麻煩了。
但是每個內(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以下就可以。
七、下面關(guān)于邏輯CPU的描述,全部來自網(wǎng)上:
現(xiàn)在的服務(wù)器一般都使用了“超線程”(Hyper-Threading,簡稱HT)技術(shù)來提高CPU的性能。超線程技術(shù)是在一顆CPU同時執(zhí)行多個程序而共同分享一顆CPU內(nèi)的資源,理論上要像兩顆CPU一樣在同一時間執(zhí)行兩個線程。
雖然采用超線程技術(shù)能同時執(zhí)行兩個線程,但它并不象兩個真正的CPU那樣,每各CPU都具有獨(dú)立的資源。當(dāng)兩個線程都同時需要某一個資源時,其中一個要暫時停止,并讓出資源,直到這些資源閑置后才能繼續(xù)。因此超線程的性能并不等于兩顆CPU的性能。
具有超線程技術(shù)的CPU還有一些其它方面的限制。
億恩科技地址(ADD):鄭州市黃河路129號天一大廈608室 郵編(ZIP):450008 傳真(FAX):0371-60123888
聯(lián)系:億恩小凡
QQ:89317007
電話:0371-63322206
本文出自:億恩科技【mszdt.com】
服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|