linux性能監控與調優-vmstat命令

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

如果您覺得本篇文章還不錯,歡迎點贊,轉發分享,感謝~~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章