Linux CPU 負載和計算




      昨天查看Nagios警報信息,發現其中一臺服務器CPU負載太重,機器爲CentOS系統。信息以下:
2011-2-15 (星期二) 17:50WARNING - load average: 9.73, 10.67, 10.49
還有前兩個小時發出的警報信息:
2011-2-15 (星期二) 16:50WARNING - load average: 10.52, 10.10, 10.06
2011-2-15 (星期二) 15:40WARNING - load average: 8.27, 9.23, 9.48
1、警報信息的三個參數究竟是什麼意思? 9.7三、10.6七、10.49分別表明前一分鐘,五分鐘,十五分鐘的平均CPU負載,最重要的指標是最後一個數字,即前15分鐘的平均CPU負載,這個數字越小越好。所謂CPU負載指的是一段時間內任務隊列的長度,通俗的講,就是一段時間內一共有多少任務在使用或等待使用CPU。
2、除了Nagios,還有哪些工具能夠查看CPU負載? 可使用top命令、uptime命令,特別是top命令,功能強大,不只僅能夠用來查看CPU負載。   3、CPU負載怎麼理解?是否是CPU利用率? 這裏要區別CPU負載和CPU利用率,它們是不一樣的兩個概念,但它們的信息能夠在同一個top命令中進行顯示。CPU利用率顯示的是程序在運行期間實時佔用的CPU百分比,而CPU負載顯示的是一段時間內正在使用和等待使用CPU的平均任務數。CPU利用率高,並不意味着負載就必定大。網上有篇文章舉了一個有趣比喻,拿打電話來講明二者的區別,我按本身的理解闡述一下。 某公用電話亭,有一我的在打電話,四我的在等待,每人限定使用電話一分鐘,如有人一分鐘以內沒有打完電話,只能掛掉電話去排隊,等待下一輪。電話在這裏就至關於CPU,而正在或等待打電話的人就至關於任務數。 在電話亭使用過程當中,確定會有人打完電話走掉,有人沒有打完電話而選擇從新排隊,更會有新增的人在這兒排隊,這我的數的變化就至關於任務數的增減。爲了統計平均負載狀況,咱們5秒鐘統計一次人數,並在第一、五、15分鐘的時候對統計狀況取平均值,從而造成第一、五、15分鐘的平均負載。 有的人拿起電話就打,一直打完1分鐘,而有的人可能前三十秒在找電話號碼,或者在猶豫要不要打,後三十秒才真正在打電話。若是把電話看做CPU,人數看做任務,咱們就說前一我的(任務)的CPU利用率高,後一我的(任務)的CPU利用率低。 固然, CPU並不會在前三十秒工做,後三十秒歇着,只是說,有的程序涉及到大量的計算,因此CPU利用率就高,而有的程序牽涉到計算的部分不多,CPU利用率天然就低。但不管CPU的利用率是高是低,跟後面有多少任務在排隊沒有必然關係。   4、瞭解了CPU負載的含義,咱們如何來下降服務器的CPU負載呢? 最簡單辦法的是更換性能更好的服務器,不要想着僅僅提升CPU的性能,那沒有用,CPU要發揮出它最好的性能還須要其它軟硬件的配合。 在服務器其它方面配置合理的狀況下,CPU數量和CPU核心數(即內核數)都會影響到CPU負載,由於任務最終是要分配到CPU核心去處理的。兩塊CPU要比一塊CPU好,雙核要比單核好。 所以,咱們須要記住,除去CPU性能上的差別,CPU負載是基於內核數來計算的!有一個說法,「有多少內核,即有多少負載」。   5、那麼,本文開頭的CPU負載分擔到每一個CPU上的負載是多少呢?那就要看我這臺服務器有一共有多少個內核了。 Linux裏有一個/proc目錄,存放的是當前運行系統的虛擬映射,其中有一個文件爲cpuinfo,這個文件裏存放着CPU的信息。咱們能夠直接打開查看,或者過濾關鍵字進行查看,由於文件內容比較多,因此通常咱們須要過濾關鍵字。 /proc/cpuinfo文件按邏輯CPU而非真實CPU分段落顯示信息,每一個邏輯CPU的信息佔用一個段落,第一個邏輯CPU標識從0開始。咱們首先要明白這一點,至於什麼是邏輯CPU,下面會提到。要理解該文件中的CPU信息,有幾個相關的概念要知道: processor:邏輯CPU的標識 model name:真實CPU的型號信息 physical id:真實CPU和標識 cpu cores:真實CPU的內核數  
$>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
能夠看出,該服務器CPU型號爲Intel(R) Xeon(R) CPU E5320,雙CPU,每一個CPU都是雙核,至關於服務器有4個內核。 前面咱們說CPU負載是基於CPU內核數計算的,那麼之前十五分鐘的平均負載數10.49爲例,咱們能夠得出,這臺服務器每一個CPU的負載爲5.245,再分配到內核上,每一個內核的負載爲2.6左右。 這個負載是不是合理的呢?那就要看理想CPU負載的標準是什麼樣子的了。   6、CPU負載爲多少纔算比較理想? 這個有爭議,各有各的說法,我我的比較贊同CPU負載小於等於0.7算是一種理想狀態。 無論某個CPU的性能有多好,1秒鐘能處理多少任務,咱們能夠認爲它可有可無,雖然事實並不是如此。在評估CPU負載時,咱們只以5秒鐘爲單位爲統計任務隊列長度。若是每隔5秒鐘統計的時候,發現任務隊列長度都是1,那麼CPU負載就爲1。假如咱們只有一個單核的CPU,負載一直爲1,意味着沒有任務在排隊,還不錯。 上面提到的我那臺服務器,是雙核又CPU,等因而有4個內核,每一個內核的負載爲1的話,總負載爲4。這就是說,若是我那臺服務器的CPU負載長期保持在4左右,還能夠接受。但實際上CPU負載已經達到9以上了,因此就很麻煩了。   可是每一個內核的負載爲1,並不能算是一種理想狀態!這意味着咱們的CPU一直很忙,不得悠閒。網上有說理想的狀態是每一個內核的負載爲0.7左右,我比較贊同,0.7乘之內核數,得出服務器理想的CPU負載,好比我這臺服務器,負載在3.0如下就能夠。   7、下面關於邏輯CPU的描述,所有來自網上: 如今的服務器通常都使用了「超線程」(Hyper-Threading,簡稱HT)技術來提升CPU的性能。超線程技術是在一顆CPU同時執行多個程序而共同分享一顆CPU內的資源,理論上要像兩顆CPU同樣在同一時間執行兩個線程。 雖然採用超線程技術能同時執行兩個線程,但它並不象兩個真正的CPU那樣,每各CPU都具備獨立的資源。當兩個線程都同時須要某一個資源時,其中一個要暫時中止,並讓出資源,直到這些資源閒置後才能繼續。所以超線程的性能並不等於兩顆CPU的性能。 具備超線程技術的CPU還有一些其它方面的限制。   8、學習過程當中參考了下列文檔,在此一併感謝: http://www.gracecode.com/archives/2973/ http://xuev.blogbus.com/logs/37835586.html  
相關文章
相關標籤/搜索