Linux檢視機器負載

工程師WWW發表於2016-04-07

負載(load)是linux機器的一個重要指標,直觀了反應了機器當前的狀態。如果機器負載過高,那麼對機器的操作將難以進行。

Linux的負載高,主要是由於CPU使用、記憶體使用、IO消耗三部分構成。任意一項使用過多,都將導致伺服器負載的急劇攀升。

檢視伺服器負載有多種命令,w或者uptime都可以直接展示負載,

$ uptime
12:20:30 up 44 days, 21:46,  2 users,  load average: 8.99, 7.55, 5.40
$ w
12:22:02 up 44 days, 21:48,  2 users,  load average: 3.96, 6.28, 5.16

load average分別對應於過去1分鐘,5分鐘,15分鐘的負載平均值。

什麼是Load?什麼是Load Average? 

  Load 就是對計算機幹活多少的度量(WikiPedia:the system Load is a measure of the amount of work that a compute system is doing)簡單的說是程式佇列的長度。Load Average 就是一段時間(1分鐘、5分鐘、15分鐘)內平均Load

如何判斷系統是否已經Over Load
  對一般的系統來說,根據cpu數量去判斷。如果平均負載始終在1.2以下,而你有2顆cup的機器。那麼基本不會出現cpu不夠用的情況。也就是Load平均要小於Cpu的數量,一般是會根據15分鐘那個load 平均值為首先

這兩個命令只是單純的反映出負載,linux提供了更為強大,也更為實用的top命令來檢視伺服器負載。

$top

技術分享

Tasks行展示了目前的程式總數及所處狀態,要注意zombie,表示殭屍程式,不為0則表示有程式出現問題。

Cpu(s)行展示了當前CPU的狀態,us表示使用者程式佔用CPU比例,sy表示核心程式佔用CPU比例,id表示空閒CPU百分比,wa表示IO等待所佔用的CPU時間的百分比。wa佔用超過30%則表示IO壓力很大

Mem行展示了當前記憶體的狀態,total是總的記憶體大小,userd是已使用的,free是剩餘的,buffers是目錄快取。

Swap行同Mem行,cached表示快取,使用者已開啟的檔案。如果Swap的used很高,則表示系統記憶體不足

在top命令下,按1,則可以展示出伺服器有多少CPU,及每個CPU的使用情況

技術分享

一般而言,伺服器的合理負載是CPU核數*2。也就是說對於8核的CPU,負載在16以內表明機器執行很穩定流暢。如果負載超過16了,就說明伺服器的執行有一定的壓力了。

在top命令下,按shift + "c",則將程式按照CPU使用率從大到小排序按shift+"p",則將程式按照記憶體使用率從大到小排序,很容易能夠定位出哪些服務佔用了較高的CPU和記憶體。

僅僅有top命令是不夠的,因為它僅能展示CPU和記憶體的使用情況,對於負載升高的另一重要原因——IO沒有清晰明確的展示。linux提供了iostat命令,可以瞭解io的開銷。

輸入iostat -x 1 10命令,表示開始監控輸入輸出狀態,-x表示顯示所有引數資訊,1表示每隔1秒監控一次,10表示共監控10次

技術分享

其中rsec/s表示讀入,wsec/s表示每秒寫入,這兩個引數某一個特別高的時候就表示磁碟IO有很大壓力,util表示IO使用率,如果接近100%,說明IO滿負荷運轉。 

檢視系統負載vmstat

$vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 689568 121068 1397252 0 0 77 8 110 745 4 1 93 1 0

r 列表示執行和等待cpu時間片的程式數,如果長期大於1,說明cpu不足,需要增加cpu。 
b 列表示在等待資源的程式數,比如正在等待I/O、或者記憶體交換等。 cpu 表示cpu的使用狀態 
us 列顯示了使用者方式下所花費 CPU 時間的百分比。us的值比較高時,說明使用者程式消耗的cpu時間多,但是如果長期大於50%,需要考慮優化使用者的程式。 
sy 列顯示了核心程式所花費的cpu時間的百分比。這裡us + sy的參考值為80%,如果us+sy 大於 80%說明可能存在CPU不足。 
wa 列顯示了IO等待所佔用的CPU時間的百分比。這裡wa的參考值為30%,如果wa超過30%,說明IO等待嚴重,這可能是磁碟大量隨機訪問造成的,也可能磁碟或者磁碟訪問控制器的頻寬瓶頸造成的(主要是塊操作)。 
id 列顯示了cpu處在空閒狀態的時間百分比 system 顯示採集間隔內發生的中斷數 
in 列表示在某一時間間隔中觀測到的每秒裝置中斷數。 cs列表示每秒產生的上下文切換次數,如當 cs 比磁碟 I/O 和網路資訊包速率高得多,都應進行進一步調查。
memory 
swpd 切換到記憶體交換區的記憶體數量(k表示)。如果swpd的值不為0,或者比較大,比如超過了100m,只要si、so的值長期為0,系統效能還是正常 
free 當前的空閒頁面列表中記憶體數量(k表示) buff 作為buffer cache的記憶體數量,一般對塊裝置的讀寫才需要緩衝。 cache: 作為page cache的記憶體數量,一般作為檔案系統的cache,如果cache較大,說明用到cache的檔案較多,如果此時IO中bi比較小,說明檔案系統效率比較好。 swap 
si 由記憶體進入記憶體交換區數量。 so由記憶體交換區進入記憶體數量。 IO 
bi 從塊裝置讀入資料的總量(讀磁碟)(每秒kb)。 bo 塊裝置寫入資料的總量(寫磁碟)(每秒kb) 
這裡我們設定的bi+bo參考值為1000,如果超過1000,而且wa值較大應該考慮均衡磁碟負載,可以結合iostat輸出來分析

相關文章