linux的vmstat命令詳解

Vmstatlinux

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 0ios


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輸出來分析。ide

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-->在運行的進程數

b-->在等待io的進程數(等待i/o,paging等等)

w-->能夠進入運行隊列但被替換的進程

memoy(以k爲單位,包括虛擬內核和真實內存,正在運行或最近20秒在運行的進程所用的虛擬內存將被視爲active)

avm-->活動的虛擬內存

free-->空閒的內存

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

flt-->錯誤頁總數

re-->回收的頁面

pi-->進入頁面數

po-->出頁面數

fr-->空餘的頁面數

sr-->每秒經過時鐘算法掃描的頁面

disk 顯示每秒的磁盤操做(磁盤名字的前兩個字母加數字,默認只顯示兩個磁盤,若是有多的,能夠加-n來增長數字或在命令行下把磁盤名都填上。)

fault 顯示每秒的中斷數

in-->設備中斷

sy-->系統中斷

cy-->cpu交換

cpu 表示cpu的使用狀態

cs-->用戶進程使用的時間

sy-->系統進程使用的時間

id-->cpu空閒的時間

解釋:

若是 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-->在運行隊列中等待的進程數 b-->在等待io的進程數 w-->能夠進入運行隊列但被替換的進程 memoy swap-->現時可用的交換內存(k表示) free-->空閒的內存(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命令能夠獲得詳細的解釋。  

相關文章
相關標籤/搜索