每日Linux命令(2):vmstat

迷倪小魏發表於2017-10-28

vmstat是Virtual Meomory Statistics(虛擬記憶體統計)的縮寫, 是實時系統監控工具;用來獲得有關程式、虛存、頁面交換空間及 CPU活動的資訊。這些資訊反映了系統的負載情況;這個命令Linux/Unix都支援,而且相比top,透過該命令可以看到整個機器的CPU,記憶體,IO的使用情況,而不是單單看到各個程式的CPU使用率和記憶體使用率(使用場景不一樣)

 

1、命令格式

vmstat [-a] [-n] [-S unit] [delay [ count]]

       vmstat [-s] [-n] [-S unit]

       vmstat [-m] [-n] [delay [ count]]

       vmstat [-d] [-n] [delay [ count]]

       vmstat [-p disk partition] [-n] [delay [ count]]

       vmstat [-f]

       vmstat [-V]

 

2、命令引數

-a:顯示活躍和非活躍記憶體

-f:顯示從系統啟動至今的fork數量 

-m:顯示slabinfo

-n:只在開始時顯示一次各欄位名稱。

-s:顯示記憶體相關統計資訊及多種系統活動數量。

delay:重新整理時間間隔。如果不指定,只顯示一條結果。

count:重新整理次數。如果不指定重新整理次數,但指定了重新整理時間間隔,這時重新整理次數為無窮。

-d:顯示磁碟相關統計資訊。

-p:顯示指定磁碟分割槽統計資訊

-S:使用指定單位顯示。引數有 k ,分別代表1000102410000001048576位元組(byte)。預設單位為K1024 bytes

-V:顯示vmstat版本資訊。

 

3、使用示例

 

[root@seaing ~]# 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 15700892 181712 385304    0    0     4    11   30   26  0  0 100  0  0

 

[root@seaing ~]# vmstat -a
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 15700892 272456 344768    0    0     4    11   30   26  0  0 100  0  0

 

--2秒採集一次伺服器狀態,共採集6

[root@seaing ~]# vmstat 2 6
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 15701016 181712 385308    0    0     4    11   32   26  0  0 100  0  0
 0  0      0 15701016 181712 385308    0    0     0     0 1015   72  0  0 100  0  0
 0  0      0 15701016 181712 385308    0    0     0     0 1016   71  0  0 100  0  0
 0  0      0 15701016 181712 385308    0    0     0    14 1016   76  0  0 100  0  0
 0  0      0 15701008 181712 385308    0    0     0     0 1014   73  0  0 100  0  0
 0  0      0 15701008 181712 385308    0    0     0     0 1019   70  0  0 100  0  0

說明:

類別

專案

含義

說明

Procs(程式)

r

等待執行的任務數

展示了正在執行和等待cpu資源的任務個數。當這個值超過了cpu個數,就會出現cpu瓶頸。

這個也和top的負載有關係,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,伺服器的狀態很危險。top的負載類似每秒的執行佇列。如果執行佇列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。

B

等待IO的程式數量

 也可以理解為阻塞的程式

Memory(記憶體)

swpd

正在使用虛擬的記憶體大小,單位k

 虛擬記憶體已使用的大小,如果大於0,表示你的機器實體記憶體不足了,如果不是程式記憶體洩露的原因,那麼你該升級記憶體了或者把耗記憶體的任務遷移到其他機器。

free

空閒實體記憶體的大小

 

buff

已用的buff大小,對塊裝置的讀寫進行緩衝

 

cache

已用的cache大小,檔案系統的cache

 cache直接用來記憶我們開啟的檔案,給檔案做緩衝 (這裡是Linux/Unix的聰明之處,把空閒的實體記憶體的一部分拿來做檔案和目錄的快取,是為了提高 程式執行的效能,當程式使用記憶體時,buffer/cached會很快地被使用。)

Swap

si

每秒從磁碟讀入虛擬記憶體的大小(單位:kb/s

 如果這個值大於0,表示實體記憶體不夠用或者記憶體洩露了,要查詢耗記憶體程式解決掉。

so

每秒虛擬記憶體寫入磁碟的大小

 如果這個值大於0,同上

IO

bi

每秒讀取的塊數(讀磁碟)

這裡的塊裝置是指系統上所有的磁碟和其他塊裝置,預設塊大小是1024byte

bo

每秒寫入的塊數(寫磁碟)

 例如我們讀取檔案,bo就要大於0bibo一般都要接近0,不然就是IO過於頻繁,需要調整。

system

in

每秒CPU的中斷數,包括時鐘中斷

這兩個值越大,會看到由核心消耗的cpu時間會越多

上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。

cs

每秒上下文切換數

CPU(以百分比表示)

us

使用者程式執行消耗cpu時間(user time)

us的值比較高時,說明使用者程式消耗的cpu時間多,但是如果長期超過50%的使用,那麼我們就該考慮最佳化程式演算法或其他措施了

sy

系統程式消耗cpu時間(system time)

sys的值過高時,說明系統核心消耗的cpu資源多,這個不是良性的表現,我們應該檢查原因。

id

空閒時間(包括IO等待時間)

 一般來說,id + us + sy = 100,一般我認為id是空閒CPU使用率,us是使用者CPU使用率,sy是系統CPU使用率。

wa

等待IO時間

wa過高時,說明io等待比較嚴重,這可能是由於磁碟大量隨機訪問造成的,也有可能是磁碟的頻寬出現瓶頸。

 

 

--顯示磁碟相關統計資訊

[root@seaing ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
ram0       0      0       0       0      0      0       0       0      0      0
ram1       0      0       0       0      0      0       0       0      0      0
ram2       0      0       0       0      0      0       0       0      0      0
ram3       0      0       0       0      0      0       0       0      0      0
ram4       0      0       0       0      0      0       0       0      0      0
ram5       0      0       0       0      0      0       0       0      0      0
ram6       0      0       0       0      0      0       0       0      0      0
ram7       0      0       0       0      0      0       0       0      0      0
ram8       0      0       0       0      0      0       0       0      0      0
ram9       0      0       0       0      0      0       0       0      0      0
ram10      0      0       0       0      0      0       0       0      0      0
ram11      0      0       0       0      0      0       0       0      0      0
ram12      0      0       0       0      0      0       0       0      0      0
ram13      0      0       0       0      0      0       0       0      0      0
ram14      0      0       0       0      0      0       0       0      0      0
ram15      0      0       0       0      0      0       0       0      0      0
sda    19755  13057  834627   82098 488536 207361 5567304  207387      0    161
sdb      941   2526    5713     361    842  70921  143526    2720      0      0
sdc      449    191    2711      75      0      0       0       0      0      0
sdd   237174    194 1896535   22173   1874 233855 1885832  328146      0     24
sde      868   1757    4251     277    760  71240  144000    3584      0      0
sdf      414    101    1711      34      0      0       0       0      0      0
sdg    22910    101  181679    4143    189  22314  180024   32323      0      4
sdh      877   1748    4251      84    623  71377  144000   65594      0      0
sdi      418     95    1695      47      0      0       0       0      0      0
sdj    22417     95  177687    2323    192  22797  183912   79565      0      3
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
sdk      881   2145    4879     204    615  70984  143204   65317      0      0
sdl      414    101    1711      30      0      0       0       0      0      0
sdm    22413    101  177703    4086    186  21814  176000   75456      0      4
dm-0   30821      0  829946  324147 695909      0 5567272  681182      0    161
dm-1     112      0     896     905      0      0       0       0      0      0
sr0        0      0       0       0      0      0       0       0      0      0
md0        0      0       0       0      0      0       0       0      0      0
loop0      0      0       0       0      0      0       0       0      0      0
loop1      0      0       0       0      0      0       0       0      0      0
loop2      0      0       0       0      0      0       0       0      0      0
loop3      0      0       0       0      0      0       0       0      0      0
loop4      0      0       0       0      0      0       0       0      0      0
loop5      0      0       0       0      0      0       0       0      0      0
loop6      0      0       0       0      0      0       0       0      0      0
loop7      0      0       0       0      0      0       0       0      0      0

 

--檢視分割槽的資源使用情況

[root@seaing ~]# vmstat -p /dev/sda1
sda1          reads   read sectors  writes    requested writes
                 124       2309          9         32

--

--M為單位顯示所有情況

[root@seaing ~]# vmstat -S m
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  16077    186    394    0    0     4    11   31   26  0  0 100  0  0

 

--顯示vmstat版本的資訊

[root@seaing ~]# vmstat –V
procps version 3.2.7

 

 

--顯示記憶體相關統計資訊及多種系統活動數量

[root@seaing ~]# vmstat -s
     16426356  total memory
       725216  used memory
       344788  active memory
       272460  inactive memory
     15701140  free memory
       181712  buffer memory
       385320  swap cache
     18481144  total swap
            0  used swap
     18481144  free swap
         4478 non-nice user cpu ticks
         2105 nice user cpu ticks
        11814 system cpu ticks
     38902423 idle cpu ticks
        14495 IO-wait cpu ticks
        13407 IRQ cpu ticks
         4756 softirq cpu ticks
            0 stolen cpu ticks
      1654066 pages paged in
      4289217 pages paged out
            0 pages swapped in
            0 pages swapped out
     99503472 interrupts
     10117715 CPU context switches
   1508999388 boot time
         8617 forks

說明:

non-nice user cpu ticks 自系統啟動以來,CPU在使用者態下執行非nice程式的時間,單位為jiffies user
nice user cpu ticks     
自系統啟動以來,CPU在使用者態下執行nice程式的時間,單位為jiffies nice
system cpu ticks        
自系統啟動以來,CPU處於系統狀態的時間,單位為jiffies sys
idle cpu ticks          
自系統啟動以來,CPU處於閒置狀態的時間,單位為jiffies idle
IO-wait cpu ticks       
自系統啟動以來,CPU處理IO中斷的時間,單位為jiffies iowait
IRQ cpu ticks           
自系統啟動以來,CPU處理硬中斷的時間,單位為jiffies irq
softirg cpu ticks       
自系統啟動以來,CPU處理軟中斷的時間,單位為jiffies Softirq
interrupts              
自系統啟動以來,發生的所有的中斷的次數目 Intr
CPU context switches    
自系統啟動以來,發生的上下文交換的次數 Ctxt
boot time               
自系統啟動以來到現在執行的時間,單位為秒。 btime
forks                   
自系統啟動以來所建立的任務的個數目。 Process

 

 

4、常見問題處理

 

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

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

 

作者:SEian.G(苦練七十二變,笑對八十一難)


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

相關文章