首頁  >  文章  >  運維  >  理解Linux CPU負載和 CPU使用率

理解Linux CPU負載和 CPU使用率

步履不停
步履不停原創
2019-07-02 16:16:153208瀏覽

理解Linux CPU負載和 CPU使用率

CPU負載與CPU使用率

#這兩個從一定程度上都可以反映一台機器的繁忙程度.

cpu使用率反映的是當前cpu的繁忙程度,忽高忽低的原因在於佔用cpu處理時間的進程可能處於io等待狀態但卻還未釋放進入wait。

平均負載(load average)是指某段時間佔用cpu時間的進程和等待cpu時間的進程數,這裡等待cpu時間的進程是指等待被喚醒的進程,不包括處於wait狀態進程。

以上分析可以看出,一台機器很有可能處於低cpu使用率高負載的情況,因此看機器的繁忙程度應該結合兩者,從實際的使用情況觀察,自己的一台雙核心志強2.8GHZ,2G記憶體的機器在平均負載到50左右,cpu使用率才接近100%(應用有不少io操作),這種情況下應用還算流暢,實際訪問延遲不是很高。因此在cpu還空閒的情況下,如何提高io響應是減少負載的關鍵,很多人認為負載到幾十了機器就非常繁忙了,我倒覺得如果這個時候cpu使用率比較低,則負載高可能不能很好說明問題,一旦cpu處理的進程處理完後,那些等待的進程也能立刻得到回應,這種情況下應該優化io讀寫速度。真到cpu使用率一直90%以上,即使平均負載只有個位數(例如某一個進程一直在運算),那機器其實也已經繁忙了~

其實,在前面的文章中,也有寫到cpu使用率低負載高,原因分析 cpu使用率低,但是load很高,load很高的可能是IO

CPU負載的一個類比

# #判斷系統負荷是否過重,必須理解load average的真正意義。下面,我根據"Understanding Linux CPU Load"這篇文章,試著用最通俗的語言,解釋這個問題。

首先,假設最簡單的情況,你的電腦只有一個CPU,所有的運算都必須由這個CPU來完成。
那麼,我們不妨把這個CPU想像成一座大橋,橋上只有一條車道,所有車輛都必須從這根車道上通過。 (很顯然,這座橋只能單向通行。)
系統負荷為0,意味著大橋上一輛車也沒有。

系統負荷為0.5,表示大橋一半的路段有車。

系統負荷為1.0,表示大橋的所有路段都有車,也就是說大橋已經"滿"了。但是必須注意的是,直到此時大橋還是能順暢通行的。

系統負載為1.7,表示車輛太多了,大橋已經被佔滿了(100%),後面等著上橋的車輛為橋面車輛的70%。以此類推,系統負荷2.0,意味著等待上橋的車輛與橋面的車輛一樣多;系統負荷3.0,意味著等待上橋的車輛是橋面車輛的2倍。總之,當系統負荷大於1,後面的車輛就必須等待了;系統負荷越大,過橋就必須等越久。

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是一個關鍵值,超過這個值,系統就不在最佳狀態了,你要動手幹預了。

CPU負載-多處理器

上面,我們假設你的電腦只有1個CPU。如果你的電腦裝了2個CPU,會發生什麼事呢?

2個CPU,意味著電腦的處理能力增加了一倍,能夠同時處理的進程數量也增加了一倍。
還是用大橋來類比,兩個CPU就意味著大橋有兩根車道了,通車能力翻倍了。

所以,2個CPU表示系統負載可以達到2.0,此時每個CPU都達到100%的工作量。推廣開來,n個CPU的電腦,可接受的系統負荷最大為n.0。

CPU負載-多核心處理器

晶片廠商往往在一個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 -l24

#答案是:

[root@jiangyi01.sqa.zmf /home/ahao.mah/ALIOS_QA]#echo "0.7*24" |bc16.8

#最佳觀察時長

最後一個問題,"load average"總共回傳三個平均值----1分鐘系統負荷、5分鐘系統負荷,15分鐘系統負荷,----應該參考哪個值?
如果只有1分鐘的系統負荷大於1.0,其他兩個時間段都小於1.0,這表示只是暫時現象,問題不大。
若15分鐘內,平均係統負荷大於1.0(調整CPU核心數之後),表示問題持續存在,不是暫時現象。所以,你應該主要觀察"15分鐘系統負荷",將它作為電腦正常運作的指標。

更多Linux文章,請造訪Linux教學欄位進行學習!

以上是理解Linux CPU負載和 CPU使用率的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:shell常用命令下一篇:shell常用命令