歡迎您光臨本站 註冊首頁

linux里的CPU負載

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
昨天查看Nagios警報信息,發現其中一台伺服器CPU負載過重,機器為CentOS系統.信息如下:
  1. 2011-2-15 (星期二) 17:50
  2. WARNING - load average: 9.73, 10.67, 10.49
還有前兩個小時發出的警報信息:
  1. 2011-2-15 (星期二) 16:50
  2. WARNING - load average: 10.52, 10.10, 10.06
  1. 2011-2-15 (星期二) 15:40
  2. WARNING - load average: 8.27, 9.23, 9.48
一、警報信息的三個參數到底是什麼意思? 9.7310.6710.49分別代表前一分鐘,五分鐘,十五分鐘的平均CPU負載,最重要的指標是最后一個數字,即前15分鐘的平均CPU負載,這個數字越小越好.所謂CPU負載指的是一段時間內任務隊列的長度,通俗的講,就是一段時間內一共有多少任務在使用或等待使用

CPU.

二、除了Nagios,還有哪些工具可以查看CPU負載? 可以使用top命令、uptime命令,特別是top命令,功能強大,不僅僅可以用來查看CPU負載. 三、CPU負載怎麼理解?是不是CPU利用率? 這裡要區別CPU負載和CPU利用率,它們是不同的兩個概念,但它們的信息可以在同一個top命令中進行顯示.CPU利用率顯示的是程序在運行期間實時佔用的CPU百分比,而CPU負載顯示的是一段時間內正在使用和等待使用CPU的平均任務數.CPU利用率高,並不意味著負載就一定大.網上有篇文章舉了一個有趣比喻,拿打電話來說明兩者的區別,我按自己的理解闡述一下. 某公用電話亭,有一個人在打電話,四個人在等待,每人限定使用電話一分鐘,若有人一分鐘之內沒有打完電話,只能掛掉電話去排隊,等待下一輪.電話在這裡就相當於CPU,而正在或等待打電話的人就相當於任務數.

在電話亭使用過程中,肯定會有人打完電話走掉,有人沒有打完電話而選擇重新排隊,更會有新增的人在這兒排隊,這個人數的變化就相當於任務數的增減.為了統計平均負載情況,我們5秒鐘統計一次人數,並在第1515分鐘的時候對統計情況取平均值,從而形成第1515分鐘的平均負載. 有的人拿起電話就打,一直打完1分鐘,而有的人可能前三十秒在找電話號碼,或者在猶豫要不要打,后三十秒才真正在打電話.如果把電話看作CPU,人數看作任務,我們就說前一個人(任務)的CPU利用率高,后一個人(任務)的CPU利用率低. 當然, CPU並不會在前三十秒工作,后三十秒歇著,只是說,有的程序涉及到大量的計算,CPU利用率就高,而有的程序牽涉到計算的部分很少,CPU利用率自然就低.但無論CPU的利用率是高是低,跟後面有多少任務在排隊沒有必然關係. 四、了解了CPU負載的含義,我們如何來降低伺服器的CPU負載呢? 最簡單辦法的是更換性能更好的伺服器,不要想著僅僅提高

CPU的性能,那沒有用,CPU要發揮出它最好的性能還需要其它軟硬體的配合.
在伺服器其它方面配置合理的情況下,CPU數量和CPU核心數(即內核數)都會影響到CPU負載,任務最終是要分配到CPU核心去處理的.兩塊CPU要比一塊CPU好,雙核要比單核好. 因此,我們需要記住,除去CPU性能上的差異,CPU負載是基於內核數來計算的!有一個說法,「有多少內核,即有多少負載」. 五、那麼,本文開頭的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的內核數
  1. $>grep 『model name』 /proc/cpuinfo |uniq
  2. model name : 英特爾(R) Xeon(R) CPU E5320 @ 1.86GHz
  1. $>grep 『physical id』 /proc/cpuinfo |sort |uniq |wc -l
  2. 2
  1. $>grep 『cpu cores』 /proc/cpuinfo |uniq
  2. 2
可以看出,該伺服器CPU型號為英特爾(R) Xeon(R) CPU E5320,雙CPU,每個CPU都是雙核,相當於伺服器有4個內核. 前面我們說CPU負載是基於CPU內核數計算的,那麼以前十五分鐘的平均負載數10.49為例,我們可以得出,這台伺服器每個CPU的負載為5.245,再分配到內核上,每個內核的負載為2.6左右. 這個負載是否是合理的呢?那就要看理想CPU負載的標準是什麼樣子的了. 六、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以下就可以. 七、下面關於邏輯

CPU的描述,全部來自網上:
現在的伺服器一般都使用了「超線程」(Hyper-Threading,簡稱HT)技術來提高CPU的性能.超線程技術是在一顆CPU同時執行多個程序而共同分享一顆CPU內的資源,理論上要像兩顆CPU一樣在同一時間執行兩個線程. 雖然採用超線程技術能同時執行兩個線程,但它並不象兩個真正的CPU那樣,每各CPU都具有獨立的資源.當兩個線程都同時需要某一個資源時,其中一個要暫時停止,並讓出資源,直到這些資源閑置后才能繼續.因此超線程的性能並不等於兩顆CPU的性能. 具有超線程技術的CPU還有一些其它方面的限制. 八、學習過程中參考了下列文檔,在此一併感謝: http://www.gracecode.com/archives/2973/ http://xuev.blogbus.com/logs/37835586.html


[火星人 ] linux里的CPU負載已經有278次圍觀

http://coctec.com/docs/linux/show-post-49409.html