vmstat詳解

rainbowbridg發表於2012-03-08

vmstat 2 5

vmstat -s

[@more@]

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
2 0 88 199564 134860 1175252 0 0 0 352 9323 10496 8 6 85 0 0


procs
r 列表示執行和等待cpu時間片的程式數,如果長期大於1,說明cpu不足,需要增加cpu。
b 列表示在等待資源的程式數,比如正在等待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輸出來分析。

system 顯示採集間隔內發生的中斷數
in 列表示在某一時間間隔中觀測到的每秒裝置中斷數。
cs列表示每秒產生的上下文切換次數,如當 cs 比磁碟 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處在空閒狀態的時間百分比

 vmstat命令輸出分成六個部分:
  (1)程式procs:
  r:在執行佇列中等待的程式數 。
  b:在等待io的程式數 。
  (2)記憶體memoy:
  swpd:現時可用的交換記憶體(單位KB)。
  free:空閒的記憶體(單位KB)。
  buff: 緩衝去中的記憶體數(單位:KB)。
  cache:被用來做為快取記憶體的記憶體數(單位:KB)。
  (3) swap交換頁面
  si: 從磁碟交換到記憶體的交換頁數量,單位:KB/秒。
  so: 從記憶體交換到磁碟的交換頁數量,單位:KB/秒。
  (4) io塊裝置:
  bi: 傳送到塊裝置的塊數,單位:塊/秒。
  bo: 從塊裝置接收到的塊數,單位:塊/秒。
  (5)system系統:
  in: 每秒的中斷數,包括時鐘中斷。
  cs: 每秒的環境(上下文)切換次數。
  (6)cpu中央處理器:
  cs:使用者程式使用的時間 。以百分比表示。
  sy:系統程式使用的時間。 以百分比表示。
  id:中央處理器的空閒時間 。以百分比表示。

  如果 r經常大於 4 ,且id經常小於40,表示中央處理器的負荷很重。

如果bi,bo 長期不等於0,表示實體記憶體容量太小。

vmstat輸出時間標示.

vmstat 1 1 | awk '{print system("date +%H:%M:%S"),$0}'

vmstat:報告關於核心程式,虛擬記憶體,磁碟,cpu的的活動狀態的工具
主要有幾個用法:
1.vmstat 間隔 測試數量
輸出如下
kthr memory page faults cpu
----- ----------- ------------------------ ------------ -----------
r b avm fre re pi po fr sr cy in sy cs us sy id wa
0 0 26258 18280 0 0 0 7 20 0 127 227 64 1 2 96 1

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st

4 0 88 336220 255096 934424 0 0 0 0 11415 15111 10 9 82 0 0
4 0 88 336344 255096 934424 0 0 0 12 12621 17560 11 10 79 0 0
3 0 88 336220 255100 934460 0 0 0 268 12245 16786 12 10 78 0 0
其中:
kthr--核心程式的狀態
--r 執行佇列中的程式數,在一個穩定的工作量下,應該少於5 (r <5)
--b 等待佇列中的程式數(等待I/O),通常情況下是接近0的. (b=0)

memory--虛擬和真實記憶體的使用資訊
--avm 活動虛擬頁面,在程式執行中分配到工作段的頁面空間數.
--fre 空閒列表的數量.一般不少於120,當fre少於120時,系統開始自動的kill程式去釋放


free list
page--頁面活動的資訊
--re 頁面i/o的列表
--pi 從頁面輸入的頁(一般不大於5)
--po 輸出到頁面的頁
--fr 空閒的頁面數(可替換的頁面數)
--sr 透過頁面置換演算法搜尋到的頁面數
--cy 頁面置換演算法的時脈頻率


faults--在取樣間隔中的陷阱及中斷數
--in 裝置中斷
--sy 系統呼叫中斷
--cs 核心程式前後交換中斷


cpu--cpu的使用率
--us 使用者程式的時間
--sy 系統程式的時間
--id cpu空閒的時間
--wa 等待i/o的時間


一般us+sy 在單使用者系統中不大於90,在多使用者系統中不大於80.
wa時間一般不大於40.

2.vmstat -s
現實系統自初始化以來的頁面資訊.

top是給Linux的。在FreeBSD VM裡面的Free概念和其他OS完全不同,top檢視Free記憶體對於FreeBSD來說可以說沒什麼意義。正確的方法是看vmstat。

# vmstat

procs memory page disk faults cpu

r b w avm fre flt re pi po fr sr ad0 in sy cs us sy id

0 2 1 270512 20316 30 0 0 0 26 5 1223 1589 98 593 1 1 99

最好使用vmstat t [n]命令,例如 vmstat 5 5,表示在T(5)秒時間內進行N(5)次取樣。如果只使用vmstat,無法反映真正的系統情況。

procs:

r--&gt在執行的程式數

b--&gt在等待io的程式數(等待i/o,paging等等)

w--&gt可以進入執行佇列但被替換的程式

memoy(以k為單位,包括虛擬核心和真實記憶體,正在執行或最近20秒在執行的程式所用的虛擬記憶體將被視為active)

avm--&gt活動的虛擬記憶體

free--&gt空閒的記憶體

pages(統計錯誤頁和活動頁,每5秒平均一下,以秒為單位給出數值)

flt--&gt錯誤頁總數

re--&gt回收的頁面

pi--&gt進入頁面數

po--&gt出頁面數

fr--&gt空餘的頁面數

sr--&gt每秒透過時鐘演算法掃描的頁面

disk 顯示每秒的磁碟操作(磁碟名字的前兩個字母加數字,預設只顯示兩個磁碟,如果有多的,可以加-n來增加數字或在命令列下把磁碟名都填上。)

fault 顯示每秒的中斷數

in--&gt裝置中斷

sy--&gt系統中斷

cy--&gtcpu交換

cpu 表示cpu的使用狀態

cs--&gt使用者程式使用的時間

sy--&gt系統程式使用的時間

id--&gtcpu空閒的時間

解釋:

如果 r經常大於 4 ,且id經常少於40,表示cpu的負荷很重。

如果pi,po 長期不等於0,表示記憶體不足。

如果disk 經常不等於0, 且在 b中的佇列 大於3, 表示 io效能不好。

Procs
  r: 等待執行的程式數 b: 處在非中斷睡眠狀態的程式數 w: 被交換出去的可執行的程式數。此數由 linux 計算得出,但 linux 並不耗盡交換空間

  Memory

swpd: 虛擬記憶體使用情況,單位:KB
  free: 空閒的記憶體,單位KB
  buff: 被用來做為快取的記憶體數,單位:KB
  Swap
  si: 從磁碟交換到記憶體的交換頁數量,單位:KB/秒
  s 從記憶體交換到磁碟的交換頁數量,單位:KB/秒
  IO
  bi: 傳送到塊裝置的塊數,單位:塊/秒
  b 從塊裝置接收到的塊數,單位:塊/秒
  System
  in: 每秒的中斷數,包括時鐘中斷
  cs: 每秒的環境(上下文)切換次數
  CPU
  按 CPU 的總使用百分比來顯示
  us: CPU 使用時間
  sy: CPU 系統使用時間
  id: 閒置時間
  準測
  r<5,b≈0,

  如果fre對於page列,re,pi,po,cy維持於比較穩定的狀態,PI率不超過 5,如果有pagin發生,那麼關聯頁面必須先進行pageout在記憶體相對緊張的環境下pagein會強制對不同的頁面進行steal操作。如果系統正 在讀一個大批的永久頁面,你也許可以看到po和pi列會出現不一致的增長,這種情景並不一定表明系統負載過重,但是有必要對應用程式的資料訪問模式進行見 檢查。在穩定的情況下,掃描率和重置率幾乎相等,在多個程式處理使用不同的頁面的情況下,頁面會更加不穩定和雜亂,這時掃描率可能會比重置率高出。

  faults列,in,sy,cs會不斷跳躍,這裡沒有明確的限制,唯一的就是這些值最少大於100 cpu列,us,sys,id和wa也是不確定的,最理想的狀態是使cpu處於100%工作狀態,單這隻適合單使用者的情況下。

  如果在多使用者環境中us+sys》80,程式就會在執行佇列中花費等待時間,響應時間和吞吐量就會下降。wa>40表明磁碟io沒有也許存在不合理的平衡,或者對磁碟操作比較頻繁,vmstat各項:

procs: r--&gt在執行佇列中等待的程式數 b--&gt在等待io的程式數 w--&gt可以進入執行佇列但被替換的程式 memoy swap--&gt現時可用的交換記憶體(k表示) free--&gt空閒的記憶體(k表示) pages re--》回收的頁面 mf--》非嚴重錯誤的頁面 pi--》進入頁面數(k表示) po--》出頁面數(k表示) fr--》空餘的頁面數(k表示) de--》提前讀入的頁面中的未命中數 sr--》透過時鐘演算法掃描的頁面 disk 顯示每秒的磁碟操作。 s表示scsi盤,0表示盤號 fault 顯示每秒的中斷數 in--》裝置中斷 sy--》系統中斷 cy--》cpu交換 cpu 表示cpu的使用狀態 cs--》使用者程式使用的時間 sy--》系統程式使用的時間 id--》cpu空閒的時間

  如果 r經常大於 4 ,且id經常少於40,表示cpu的負荷很重。

   如果pi,po 長期不等於0,表示記憶體不足。

  如果disk 經常不等於0, 且在 b中的佇列 大於3, 表示 io效能不好。

  Linux在具有高穩定性、可靠性的同時,具有很好的可伸縮性和擴充套件性,能夠針對不同的應用和硬體環境調整,最佳化出滿足當前應用需要的最佳效能。因此企業在維護Linux系統、進行系統調優時,瞭解系統效能分析工具是至關重要的。

  在Linux下有很多系統效能分析工具,比較常見的有top、free、ps、time、timex、uptime等。下文將介紹幾個較為重要的效能分析工具vmstat、iostat和sar及其使用。

  用vmstat監視記憶體使用情況

  vmstat是Virtual Meomory Statistics(虛擬記憶體統計)的縮寫,可對作業系統的虛擬記憶體、程式、CPU活動進行監視。它是對系統的整體情況進行統計,不足之處是無法對某個程式進行深入分析。

  vmstat的語法如下:

  vmstat [-V] [-n] [delay [count]]

  其中,-V表示列印出版本資訊;-n表示在週期性迴圈輸出時,輸出的頭部資訊僅顯示一次;delay是兩次輸出之間的延遲時間;count是指按照這個時間間隔統計的次數。對於vmstat輸出各欄位的含義,可執行man vmstat檢視。

  用iostat監視I/O子系統情況

  iostat是I/O statistics(輸入/輸出統計)的縮寫,iostat工具將對系統的磁碟操作活動進行監視。它的特點是彙報磁碟活動統計情況,同時也會彙報出 CPU使用情況。同vmstat一樣,iostat也有一個弱點,就是它不能對某個程式進行深入分析,僅對系統的整體情況進行分析。

  iostat的語法如下:

iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ]

  其中,-c為彙報CPU的使用情況;-d為彙報磁碟的使用情況;-k表示每秒按 kilobytes位元組顯示資料;-t為列印彙報的時間;-v表示列印出版本資訊和用法;-x device指定要統計的裝置名稱,預設為所有的裝置;interval指每次統計間隔的時間;count指按照這個時間間隔統計的次數。

  iostat一般的輸出格式如下:

Linux 2.4.18-18smp (builder.linux.com) 2003年03月07日
avg-cpu: %user %nice %sys %idle
4.81 0.01 1.03 94.15
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
dev3-0 30.31 1117.68 846.52 16104536 12197374
dev3-1 7.06 229.61 40.40 3308486 582080

  對於輸出中各欄位的含義,iostat的幫助中有詳細的說明。

  使用sar進行綜合分析

  表1 sar引數說明

  選項 功能

  -A 彙總所有的報告

  -a 報告檔案讀寫使用情況

  -B 報告附加的快取的使用情況

  -b 報告快取的使用情況

  -c 報告系統呼叫的使用情況

  -d 報告磁碟的使用情況

  -g 報告串列埠的使用情況

  -h 報告關於buffer使用的統計資料

  -m 報告IPC訊息佇列和訊號量的使用情況

  -n 報告命名cache的使用情況

  -p 報告調頁活動的使用情況

  -q 報告執行佇列和交換佇列的平均長度

  -R 報告程式的活動情況

  -r 報告沒有使用的記憶體頁面和硬碟塊

  -u 報告CPU的利用率

  -v 報告程式、i節點、檔案和鎖表狀態

  -w 報告系統交換活動狀況

  -y 報告TTY裝置活動狀況

  sar是System Activity Reporter(系統活動情況報告)的縮寫。顧名思義,sar工具將對系統當前的狀態進行取樣,然後透過計算資料和比例來表達系統的當前執行狀態。它的 特點是可以連續對系統取樣,獲得大量的取樣資料;取樣資料和分析的結果都可以存入檔案,所需的負載很小。sar是目前Linux上最為全面的系統效能分析 工具之一,可以從14個大方面對系統的活動進行報告,包括檔案的讀寫情況、系統呼叫的使用情況、串列埠、CPU效率、記憶體使用狀況、程式活動及IPC有關的 活動等,使用也是較為複雜。

  sar的語法如下:

sar [-option] [-o file] t [n]

  它的含義是每隔t秒取樣一次,共取樣n次。其中-o file表示取樣結果將以二進位制形式存入檔案file中。

  另一種語法如下:

sar [-option] [-s time] [-e time] [-i sec] [-f file]

  含義是表示從file檔案中取出資料,如果沒有指定-f file,則從標準資料檔案/var/adm/sa/sadd取資料,其中dd表示當前天。另外,-s time表示起始時間;-e time表示停止時間;-i sec表示取樣的時間間隔,如果不指定則表示取檔案中所有的資料。對於具體的選項參見表1。

  一般它與-q和-u聯合使用,以便對每個CPU的使用情況進行分析,比如執行如下命令:

sar -q -u 5 1

  將輸出如下:

Linux 2.4.18-18smp (builder.linux.com) 2003年03月07日
09時46分16? CPU %user %nice %system %idle
09時46分21? all 0.20 0.00 0.00 99.80
09時46分16? runq-sz plist-sz ldavg-1 ldavg-5
09時46分21? 0 91 0.00 0.00
Average: CPU %user %nice %system %idle
Average: all 0.20 0.00 0.00 99.80
Average: runq-sz plist-sz ldavg-1 ldavg-5
Average: 0 91 0.00 0.00

  由於sar命令太複雜,只有透過熟練使用才能瞭解每個選項的含義,對於sar輸出中每個欄位的含義執行man sar命令可以得到詳細的解釋。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7916042/viewspace-1057541/,如需轉載,請註明出處,否則將追究法律責任。

相關文章