天天看點

Linux下CPU使用率與機器負載的關系與差別

當我們使用top指令檢視系統的資源使用情況時會看到 load average,如下圖所示。它表示系統在1、5、15分鐘的平均工作負載。那什麼是負載(load)呢?它和cpu的使用率又有什麼關系呢?

Linux下CPU使用率與機器負載的關系與差別

load average: 系統平均負載是cpu的load,它所包含的資訊不是cpu的使用率狀況,而是在一段時間内cpu正在處理以及等待cpu處理的程序數之和的統計資訊,也就是cpu使用隊列的長度的統計資訊。這個數字越小越好。

01、cpu負載和cpu使用率的差別

cpu使用率:顯示的是程式在運作期間實時占用的cpu百分比

cpu負載:顯示的是一段時間内正在使用和等待使用cpu的平均任務數。cpu使用率高,并不意味着負載就一定大。舉例來說:如果我有一個程式它需要一直使用cpu的運算功能,那麼此時cpu的使用率可能達到100%,但是cpu的工作負載則是趨近于“1”,因為cpu僅負責一個工作嘛!如果同時執行這樣的程式兩個呢?cpu的使用率還是100%,但是工作負載則變成2了。是以也就是說,當cpu的工作負載越大,代表cpu必須要在不同的工作之間進行頻繁的工作切換。

舉例說明:

網上有篇文章舉了一個有趣比喻,拿打電話來說明兩者的差別,我按自己的了解闡述一下。

某公用電話亭,有一個人在打電話,四個人在等待,每人限定使用電話一分鐘,若有人一分鐘之内沒有打完電話,隻能挂掉電話去排隊,等待下一輪。電話在這裡就相當于cpu,而正在或等待打電話的人就相當于任務數。

在電話亭使用過程中,肯定會有人打完電話走掉,有人沒有打完電話而選擇重新排隊,更會有新增的人在這兒排隊,這個人數的變化就相當于任務數的增減。為了統計平均負載情況,我們5分鐘統計一次人數,并在第1、5、15分鐘的時候對統計情況取平均值,進而形成第1、5、15分鐘的平均負載。

有的人拿起電話就打,一直打完1分鐘,而有的人可能前三十秒在找電話号碼,或者在猶豫要不要打,後三十秒才真正在打電話。如果把電話看作cpu,人數看作任務,我們就說前一個人(任務)的cpu使用率高,後一個人(任務)的cpu使用率低。

當然, cpu并不會在前三十秒工作,後三十秒歇着,隻是說,有的程式涉及到大量的計算,是以cpu使用率就高,而有的程式牽涉到計算的部分很少,cpu使用率自然就低。但無論cpu的使用率是高是低,跟後面有多少任務在排隊沒有必然關系。

02、負載為多少才算比較理想?

這個有争議,各有各的說法,個人比較贊同cpu負載小于等于0.5算是一種理想狀态。

不管某個cpu的性能有多好,1秒鐘能處理多少任務,我們可以認為它無關緊要,雖然事實并非如此。在評估cpu負載時,我們隻以5分鐘為機關為統計任務隊列長度。如果每隔5分鐘統計的時候,發現任務隊列長度都是1,那麼cpu負載就為1。假如我們隻有一個單核的cpu,負載一直為1,意味着沒有任務在排隊,還不錯。

但是我那台伺服器,是雙核又cpu,等于是有4個核心,每個核心的負載為1的話,總負載為4。這就是說,如果我那台伺服器的cpu負載長期保持在4左右,還可以接受。

但是每個核心的負載為1,并不能算是一種理想狀态!這意味着我們的cpu一直很忙,不得清閑。網上有說理想的狀态是每個核心的負載為0.7左右,我比較贊同,0.7乘以核心數,得出伺服器理想的cpu負載,比如我這台伺服器,負載在3.0以下就可以。

03、如何降低伺服器的cpu負載?

最簡單辦法的是更換性能更好的伺服器,不要想着僅僅提高cpu的性能,那沒有用,cpu要發揮出它最好的性能還需要其它軟硬體的配合。

在伺服器其它方面配置合理的情況下,cpu數量和cpu核心數(即核心數)都會影響到cpu負載,因為任務最終是要配置設定到cpu核心去處理的。兩塊cpu要比一塊cpu好,雙核要比單核好。

是以,我們需要記住,除去cpu性能上的差異,cpu負載是基于核心數來計算的!有一個說法,“有多少核心,即有多少負載”。

04、cpu使用率到多少才算比較理想?

cpu使用率在過去常常被我們這些外行認為是判斷機器是否已經到了滿負荷的一個标準,我看到長時間cpu使用率60-80%就認為機器有瓶頸出現。

本文作者:佚名

來源:51cto

繼續閱讀