說來慚愧,玩Linux這麼久了,竟然沒有玩轉vmstat這個命令,對不少指標的具體意義都有點模糊不清,花了點時間好好學習、整理一下這個命令的相關資料。由於這個命令確實比較重要,並且頻繁用到。html
命令簡介:linux
vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操做系統的虛擬內存、進程、IO讀寫、CPU活動等進行監視。它是對系統的總體狀況進行統計,不足之處是沒法對某個進程進行深刻分析。數據庫
指令所在路徑:/usr/bin/vmstat緩存
注意事項: 本文實驗、總結環境爲RHEL 5.7,vmstat在不一樣版本的Unix與Linux有所差異,使用時,最好先參考對應操做系統的vmstat版本。服務器
命令手冊中的介紹以下:oracle
DESCRIPTIONapp
vmstat reports information about processes, memory, paging, block IO,函數
traps, and cpu activity.性能
The first report produced gives averages since the last reboot. Addi-學習
tional reports give information on a sampling period of length delay.
The process and memory reports are instantaneous in either case.
命令語法:
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]
命令參數:
此命令參數是Red Hat Enterprise Linux Server release 5.7下vmstat命令參數,不一樣版本Linux的cp命令參數有可能不一樣。不過默認應該都是[ delay [ count ] ] ,delay是間隔,count顯示多少次信息。能夠和上面的某些參數結合使用。
參數 |
英文描述 |
描敘 |
delay |
|
刷新時間間隔。若是不指定,只顯示一條結果。 |
count |
|
刷新次數。若是不指定刷新次數,但指定了刷新時間間隔,這時刷新次數爲無窮。 |
-a |
The -a switch displays active/inactive memory, given a 2.5.41 kernel or better. |
開啓顯示active/inactive memory。 |
-f |
The -f switch displays the number of forks since boot. This includes the fork, vfork, and clone system calls, and is equivalent to the total number of tasks created. Each process is represented by one or more tasks, depending on thread usage. This display does not repeat. |
顯示此係統啓動以來的forks的總數,包括fork、vfork和clone system calls |
-m |
The -m displays slabinfo |
顯示slabinfo信息 |
-n |
The -n switch causes the header to be displayed only once rather than periodically. |
只顯示頭信息,不周期性顯示.也就是說開啓這個參數,只顯示頭部信息一次。 |
-s |
The -s switch displays a table of various event counters and memory statistics. This display does not repeat. |
顯示各類事件計數器表和內存統計信息,這顯示不重複。 |
-d |
The -d reports disk statistics (2.5.70 or above required) |
顯示磁盤統計數據(內核要求2.5.70 或以上) |
-w |
The -w enlarges field width for big memory sizes |
能夠擴大字段長度,當內存較大時,默認長度不夠徹底展現內存。 |
-p |
The -p followed by some partition name for detailed statistics (2.5.70 or above required) |
顯示磁盤分區數據(disk partition statistics ) |
-S |
The -S followed by k or K or m or M switches outputs between 1000, 1024, 1000000, or 1048576 bytes |
參數S控制輸出性能指標的單位,k(1000) K(1024) 或 M(1048576) 默認單位爲K(1024 bytes) |
-V |
The -V switch results in displaying version information.
|
查看vmstat命令的版本 |
輸出字段意義:
Procs
r: The number of processes waiting for run time.
等待運行的進程數。若是等待運行的進程數越多,意味着CPU很是繁忙。另外,若是該參數長期大於和等於邏輯cpu個數,則CPU資源可能存在較大的瓶頸。
b: The number of processes in uninterruptible sleep.
處在非中斷睡眠狀態的進程數。意味着進程被阻塞。主要是指被資源阻塞的進程對列數(好比IO資源、頁面調度等),當這個值較大時,須要根據應用程序來進行分析,好比數據庫產品,中間件應用等。
Memory
swpd: the amount of virtual memory used.
已使用的虛擬內存大小。若是虛擬內存使用較多,可能系統的物理內存比較吃緊,須要採起合適的方式來減小物理內存的使用。swapd不爲0,並不意味物理內存吃緊,若是swapd沒變化,si、so的值長期爲0,這也是沒有問題的
free: the amount of idle memory.
空閒的物理內存的大小
buff: the amount of memory used as buffers.
用來作buffer(緩存,主要用於塊設備緩存)的內存數,單位:KB
cache: the amount of memory used as cache.
用來作cache(緩存,主要用於緩存文件)的內存,單位:KB
inact: the amount of inactive memory. (-a option)
inactive memory的總量
active: the amount of active memory. (-a option)
active memroy的總量。
Swap
si: Amount of memory swapped in from disk (/s).
從磁盤交換到內存的交換頁數量,單位:KB/秒。
so: Amount of memory swapped to disk (/s).
從內存交換到磁盤的交換頁數量,單位:KB/秒
內存夠用的時候,這2個值都是0,若是這2個值長期大於0時,系統性能會受到影響,磁盤IO和CPU資源都會被消耗。
當看到空閒內存(free)不多的或接近於0時,就認爲內存不夠用了,這個是不正確的。不能光看這一點,還要結合si和so,
若是free不多,可是si和so也不多(大多時候是0),那麼不用擔憂,系統性能這時不會受到影響的。
當內存的需求大於RAM的數量,服務器啓動了虛擬內存機制,經過虛擬內存,能夠將RAM段移到SWAP DISK的特殊磁盤段上,
這樣會 出現虛擬內存的頁導出和頁導入現象,頁導出並不能說明RAM瓶頸,虛擬內存系統常常會對內存段進行頁導出,
但頁導入操做就代表了服務器須要更多的內存了, 頁導入須要從SWAP DISK上將內存段複製回RAM,致使服務器速度變慢。
IO
bi: Blocks received from a block device (blocks/s).
每秒從塊設備接收到的塊數,單位:塊/秒 也就是讀塊設備。
bo: Blocks sent to a block device (blocks/s).
每秒發送到塊設備的塊數,單位:塊/秒 也就是寫塊設備。
System
in: The number of interrupts per second, including the clock.
每秒的中斷數,包括時鐘中斷
cs: The number of context switches per second.
每秒的環境(上下文)切換次數。好比咱們調用系統函數,就要進行上下文切換,而過多的上下文切換會浪費較多的cpu資源,這個數值應該越小越好。
CPU
These are percentages of total CPU time.
us: Time spent running non-kernel code. (user time, including nice time)
用戶CPU時間(非內核進程佔用時間)(單位爲百分比)。 us的值比較高時,說明用戶進程消耗的CPU時間多
sy: Time spent running kernel code. (system time)
系統使用的CPU時間(單位爲百分比)。sy的值高時,說明系統內核消耗的CPU資源多,這並非良性表現,咱們應該檢查緣由。
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
空閒的CPU的時間(百分比),在Linux 2.5.41以前,這部分包含IO等待時間。
wa: Time spent waiting for IO. Prior to Linux 2.5.41, shown as zero.
等待IO的CPU時間,在Linux 2.5.41以前,這個值爲0 .這個指標意味着CPU在等待硬盤讀寫操做的時間,用百分比表示。wait越大則機器io性能就越差。說明IO等待比較嚴重,這可能因爲磁盤大量做隨機訪問形成,也有可能磁盤出現瓶頸(塊操做)。
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.
使用示例:
1: 查看vmstat命令的幫助信息
[root@DB-Server ~]# man vmstat
2: 顯示活動(active)與非活動(inactive)的內存
[root@DB-Server ~]# vmstat -a 2 10
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 242752 56264 1294680 2365840 0 0 1 18 2 2 0 2 97 0 0
1 0 242752 56504 1294676 2365736 0 0 0 0 1010 511 0 1 100 0 0
0 0 242752 55844 1294716 2366616 0 0 0 16 1011 768 1 5 94 0 0
0 0 242752 56760 1294716 2365888 0 0 0 190 1015 554 0 1 99 0 0
0 0 242752 55472 1294744 2366636 0 0 0 0 1007 751 1 6 94 0 0
0 0 242752 56636 1294748 2365904 0 0 0 16 1009 554 0 1 99 0 0
0 0 242752 55844 1294772 2366656 0 0 0 178 1020 746 1 6 93 0 0
0 0 242752 56884 1294768 2365940 0 0 0 0 1007 543 0 1 99 0 0
1 0 242752 55208 1294816 2367220 0 0 0 206 1021 726 0 4 95 0 0
0 0 242752 56760 1294796 2365960 0 0 0 16 1009 606 0 2 98 0 0
3:不加任何參數,vmstat命令只輸出一條記錄,這個數據是自系統上次重啓以後到如今的平均數值。
[root@DB-Server ~]# 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 242752 32496 112680 2724840 0 0 1 18 3 2 0 2 97 0 0
4:顯示各類事件計數器表和內存統計信息,這顯示不重複。
[oracle@mylnx01 bdump]$ vmstat -s
33011144 total memory
32799072 used memory
24606736 active memory
6175700 inactive memory
212072 free memory
52288 buffer memory
30158708 swap cache
12582904 total swap
610348 used swap
11972556 free swap
44159969 non-nice user cpu ticks
8172 nice user cpu ticks
6077972 system cpu ticks
389217442 idle cpu ticks
40807984 IO-wait cpu ticks
123964 IRQ cpu ticks
383333 softirq cpu ticks
0 stolen cpu ticks
10331447387 pages paged in
2287459081 pages paged out
1524480 pages swapped in
1433512 pages swapped out
2358479992 interrupts
1876082783 CPU context switches
1481100317 boot time
15573677 forks
5:能夠擴大字段長度,當內存較大時,默認長度不夠徹底展現內存時,會致使字段值便宜,致使查看不便
[root@DB-Server ~]# vmstat -w 2 5
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 243852 73556 110908 2678492 0 0 1 18 3 3 0 2 97 0 0
0 0 243852 72252 110916 2678484 0 0 0 172 1016 701 0 4 95 0 0
0 0 243852 73556 110916 2678544 0 0 0 0 1005 636 0 2 98 0 0
0 0 243852 72004 110916 2678540 0 0 0 16 1005 694 0 5 95 0 0
0 0 243852 73432 110924 2678580 0 0 0 192 1015 629 0 2 98 0 0
[root@DB-Server ~]# vmstat 2 5
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 243852 79284 110928 2678640 0 0 1 18 3 3 0 2 97 0 0
0 0 243852 78988 110928 2678648 0 0 0 0 1006 753 0 5 95 0 0
0 0 243852 80400 110936 2678696 0 0 0 194 1015 565 0 1 99 0 0
0 0 243852 78352 110936 2678748 0 0 0 16 1008 680 0 5 95 0 0
0 0 243852 79532 110936 2678748 0 0 0 0 1007 669 0 2 98 0 0
[root@DB-Server ~]#
以下所示,因爲有些字段值較大,致使出現下面偏移,不便查看。
6:顯示磁盤分區數據(disk partition statistics )
[oracle@mylnx01 ~]$ vmstat -p sdc5 2 10
sdc5 reads read sectors writes requested writes
54270570 7234336956 8939045 276196850
54270570 7234336956 8939045 276196850
54270570 7234336956 8939050 276196978
54270570 7234336956 8939053 276197074
54270574 7234337260 8939053 276197074
54270577 7234337292 8939066 276197346
54270622 7234339700 8939066 276197346
54270622 7234339700 8939069 276197442
54270859 7234342828 8939078 276197634
54271074 7234345452 8939080 276197666
參考資料:
http://www.linuxcommand.org/man_pages/vmstat8.html
http://www.ha97.com/4512.html