前一段時間,有同事因為“CPU負載到達5算不算高”的問題爭論了一番,看似簡單的一個問題表明了我們並沒有真正理解服務器的CPU負載。
如果你的線上服務出現性能問題,那么檢查機器的CPU負載情況是必不可少的一個環節。
我們通過簡單執行uptime命令就可以知道服務器當前的CPU負載情況。
現在我們來看一個簡單的例子,
load average: 1.14, 0.7, 4.06
上面的load average從左到右顯示的分別是最近1分鍾,5分鍾,15分鍾的CPU負載情況。
接下來是非常關鍵的一點,當前的CPU負載高還是不高,只看上面的數據是不行的,還要看服務器有多少個CPU 。
假設當前服務器只有一個CPU,那么上面的"load average"就告訴我們在最近一分鍾內,平均有0.14個進程在等待CPU;最近五分鍾內,CPU有30%的idle時間;而最近15分鍾,平均有3.06個進程在等待CPU。而當服務器有4個CPU的時候,則是另外一番景象。
因此,在討論CPU負載高還是不高的時候,你必須知道服務器的CPU數量,就像上面的例子一樣,如果是只有一個CPU的服務器,那么它的CPU顯然已經過載了,但是對於有個8個CPU的服務器來說還不是問題。
另外,通過"load average"中的三個數字,我們還可以了解到當前服務器的負載的變化趨勢,如果1分鍾的CPU負載 > 5分鍾的CPU負載,說明服務器目前處在CPU負載高峰期;而如果1分鍾的CPU負載 < 5分鍾的CPU負載,則說明服務器的CPU負載高峰期剛剛過去了,如果是你處理了什么性能問題,則表明該處理已經顯現成效了。