這兩個從必定程度上均可以反映一臺機器的繁忙程度.html
cpu使用率反映的是當前cpu的繁忙程度,忽高忽低的緣由在於佔用cpu處理時間的進程可能處於io等待狀態但卻還未釋放進入wait。linux
平均負載(load average)是指某段時間內佔用cpu時間的進程和等待cpu時間的進程數,這裏等待cpu時間的進程是指等待被喚醒的進程,不包括處於wait狀態進程。app
以上分析能夠看出,一臺機器頗有可能處於低cpu使用率高負載的狀況,所以看機器的繁忙程度應該結合二者,從實際的使用狀況觀察,本身的一臺雙核志強2.8GHZ,2G內存的機器在平均負載到50左右,cpu使用率才接近100%(應用有很多io操做),這種狀況下應用還算流暢,實際訪問延遲不是很高。所以在cpu還空閒的狀況下,如何提升io響應是減小負載的關鍵,不少人認爲負載到幾十了機器就很是繁忙了,我倒以爲若是這個時候cpu使用率比較低,則負載高可能不能很好說明問題,一旦cpu處理的進程處理完後,那些等待的進程也能馬上獲得響應,這種狀況下應該優化io讀寫速度。真到cpu使用率一直90%以上,即便平均負載只有個位數(好比某一個進程一直在運算),那機器其實也已經繁忙了~優化
其實,在前面的文章中,也有寫到cpu使用率低負載高,緣由分析 cpu使用率低,可是load很高,load很高的多是IOui
判斷系統負荷是否太重,必須理解load average的真正含義。下面,我根據"Understanding Linux CPU Load"這篇文章,嘗試用最通俗的語言,解釋這個問題。
首先,假設最簡單的狀況,你的電腦只有一個CPU,全部的運算都必須由這個CPU來完成。
那麼,咱們不妨把這個CPU想象成一座大橋,橋上只有一根車道,全部車輛都必須從這根車道上經過。(很顯然,這座橋只能單向通行。)
系統負荷爲0,意味着大橋上一輛車也沒有。spa
系統負荷爲0.5,意味着大橋一半的路段有車。code
系統負荷爲1.0,意味着大橋的全部路段都有車,也就是說大橋已經"滿"了。可是必須注意的是,直到此時大橋仍是能順暢通行的。htm
系統負荷爲1.7,意味着車輛太多了,大橋已經被佔滿了(100%),後面等着上橋的車輛爲橋面車輛的70%。以此類推,系統負荷2.0,意味着等待上橋的車輛與橋面的車輛同樣多;系統負荷3.0,意味着等待上橋的車輛是橋面車輛的2倍。總之,當系統負荷大於1,後面的車輛就必須等待了;系統負荷越大,過橋就必須等得越久。blog
CPU的系統負荷,基本上等同於上面的類比。大橋的通行能力,就是CPU的最大工做量;橋樑上的車輛,就是一個個等待CPU處理的進程(process)。
若是CPU每分鐘最多處理100個進程,那麼系統負荷0.2,意味着CPU在這1分鐘裏只處理20個進程;系統負荷1.0,意味着CPU在這1分鐘里正好處理100個進程;系統負荷1.7,意味着除了CPU正在處理的100個進程之外,還有70個進程正排隊等着CPU處理。
爲了電腦順暢運行,系統負荷最好不要超過1.0,這樣就沒有進程須要等待了,全部進程都能第一時間獲得處理。很顯然,1.0是一個關鍵值,超過這個值,系統就不在最佳狀態了,你要動手干預了。進程
上面,咱們假設你的電腦只有1個CPU。若是你的電腦裝了2個CPU,會發生什麼狀況呢?
2個CPU,意味着電腦的處理能力翻了一倍,可以同時處理的進程數量也翻了一倍。
仍是用大橋來類比,兩個CPU就意味着大橋有兩根車道了,通車能力翻倍了。
因此,2個CPU代表系統負荷能夠達到2.0,此時每一個CPU都達到100%的工做量。推廣開來,n個CPU的電腦,可接受的系統負荷最大爲n.0。
芯片廠商每每在一個CPU內部,包含多個CPU核心,這被稱爲多核CPU。
在系統負荷方面,多核CPU與多CPU效果相似,因此考慮系統負荷的時候,必須考慮這臺電腦有幾個CPU、每一個CPU有幾個核心。而後,把系統負荷除以總的核心數,只要每一個核心的負荷不超過1.0,就代表電腦正常運行。
怎麼知道電腦有多少個CPU核心呢?
"cat /proc/cpuinfo"命令,能夠查看CPU信息。"grep -c 'model name' /proc/cpuinfo"命令,直接返回CPU的總核心數。
1.0是系統負荷的理想值嗎?
不必定,系統管理員每每會留一點餘地,當這個值達到0.7,就應當引發注意了。經驗法則是這樣的:
當系統負荷持續大於0.7,你必須開始調查了,問題出在哪裏,防止狀況惡化。
當系統負荷持續大於1.0,你必須動手尋找解決辦法,把這個值降下來。
當系統負荷達到5.0,就代表你的系統有很嚴重的問題,長時間沒有響應,或者接近死機了。你不該該讓系統達到這個值。
對於個人機器,有24個core,那麼,load多少合適呢?
[root@jiangyi01.sqa.zmf /home/ahao.mah/ALIOS_QA] #grep 'model name' /proc/cpuinfo | wc -l 24
答案是:
[root@jiangyi01.sqa.zmf /home/ahao.mah/ALIOS_QA] #echo "0.7*24" |bc 16.8
最後一個問題,"load average"一共返回三個平均值----1分鐘系統負荷、5分鐘系統負荷,15分鐘系統負荷,----應該參考哪一個值?
若是隻有1分鐘的系統負荷大於1.0,其餘兩個時間段都小於1.0,這代表只是暫時現象,問題不大。
若是15分鐘內,平均系統負荷大於1.0(調整CPU核心數以後),代表問題持續存在,不是暫時現象。因此,你應該主要觀察"15分鐘系統負荷",將它做爲電腦正常運行的指標。
http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
http://share.blog.51cto.com/278008/495067
http://www.ruanyifeng.com/blog/2011/07/linux_load_average_explained.html