vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、IO讀寫、CPU活動等進行監視。它是對系統的整體情況進行統計,不足之處是無法對某個進程進行深入分析。
指令所在路徑:/usr/bin/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).
從磁盤交換到swap虛擬內存的交換頁數量,單位:KB/秒。如果這個值大於0,表示物理內存不夠用或者內存泄露了
so: Amount of memory swapped to disk (/s).
從swap虛擬內存交換到磁盤的交換頁數量,單位:KB/秒,如果這個值大於0,表示物理內存不夠用或者內存泄露了
內存夠用的時候,這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