當我們使用top命令查看系統的資源使用情況時會看到load average,如下圖所示,它表示系統在1,5,15分鐘的平均工作負載。
那么什么是負載(load)呢?它和CPU的利用率又有什么關系呢?
load average:系統平均負載是CPU的Load,它所包含的信息不是CPU的使用率狀況,而是在一段時間內CPU正在處理以及等待CPU處理的進程數之和的統計信息,也就是CPU使用隊列的長度的統計信息,這個數字越小越好。
1、CPU負載和CPU使用率的區別
CPU使用率:顯示的是程序在運行期間實時占用的CPU百分比
CPU負載:顯示的是一段時間內正在使用和等待使用CPU的平均任務數。CPU使用率高,并不意味著負載就一定大。舉例來說:如果我有一個程序它需要一直使用CPU的運算功能,那么此時CPU的使用率可能達到100%,但是CPU的工作負載則是趨近于“1”,因為CPU僅負責一個工作嘛!如果同時執行這樣的程序兩個呢?CPU的使用率還是100%,但是工作負載則變成2了。所以也就是說,當CPU的工作負載越大,代表CPU必須要在不同的工作之間進行頻繁的工作切換。
2、負載為多少才算比較理想?
這個有爭議,各有各的說法,個人比較贊同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以下就可以。
3、如何來降低服務器的CPU負載?
最簡單辦法的是更換性能更好的服務器,不要想著僅僅提高CPU的性能,那沒有用,CPU要發揮出它最好的性能還需要其它軟硬件的配合。
在服務器其它方面配置合理的情況下,CPU數量和CPU核心數(即內核數)都會影響到CPU負載,因為任務最終是要分配到CPU核心去處理的。兩塊CPU要比一塊CPU好,雙核要比單核好。
因此,我們需要記住,除去CPU性能上的差異,CPU負載是基于內核數來計算的!有一個說法,“有多少內核,即有多少負載”。
4、CPU使用率到多少才算比較理想?
CPU利用率在過去常常被我們這些外行認為是判斷機器是否已經到了滿負荷的一個標準,我看到長時間CPU使用率60-80%就認為機器有瓶頸出現。