linux性能分析命令--vmstat

vmstat簡介

vmstat命令是最常見的Linux/Unix監控工具,可以展現給定時間間隔的服務器的狀態值,包括服務器的CPU使用率,內存使用,虛擬內存交換情況,IO讀寫情況。相比top,可以看到整個機器的CPU,內存,IO的使用情況,而不是單單看到各個進程的CPU使用率和內存使用率(使用場景不一樣)

命令簡單用法

一般vmstat工具的使用是通過兩個數字參數來完成的,第一個參數是采樣的時間間隔數,單位是秒,第二個參數是采樣的次數

[root@vircent7 ~]# vmstat 2 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1068348   2108 372104    0    0   593    42  217  214  1  5 91  3  0
 0  0      0 1068324   2108 372104    0    0     0     0   92  136  0  0 100  0  0
 0  0      0 1068324   2108 372104    0    0     0     0  102  149  0  0 100  0  0

以上命令表示每隔2秒采樣一次,一共采樣3次,小面的每一行實際的數字就是每次采樣的數據。
如果想在一段時間內連續監控,則不需要加采樣次數的參數,就會一直采樣,直至手動結束。

vmstat各字段說明

1、procs-進程相關

r:表示運行和等待CPU時間片的進程數(就是說多少個進程真的分配到CPU),這個值如果長期大于系統CPU個數,說明CPU不足,需要增加CPU

b:顯示多少進程在不可中斷的休眠,表示在等待資源的進程數,比如正在等待I/O或者內存交換等。

2、memory--內存相關

swpd:表示切換到內存交換區的內存大小,即虛擬內存已使用的大小(單位KB),如果大于0,表示你的機器物理內存不足了,如果不是程序內存泄露的原因,那么你該升級內存了或者把耗內存的任務遷移到其他機器。

free:表示當前空閑的物理內存

buff:表示baffers cached內存大小,也就是緩沖大小,一般對塊設備的讀寫才需要緩沖

Cache:表示page cached的內存大小,也就是緩存大小,一般作為文件系統進行緩沖,頻繁訪問的文件都會被緩存,如果cache值非常大說明緩存文件比較多,如果此時io中的bi比較小,說明文件系統效率比較好(Linux/Unix的聰明之處,把空閑的物理內存的一部分拿來做文件和目錄的緩存,是為了提高 程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用)

3、swap--交換分區

si:每秒從磁盤讀入虛擬內存的大小,如果這個值大于0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。

so:每秒虛擬內存寫入磁盤的大小。

注意:一般情況下si、so的值都為0,如果si、so的值長期不為0,則說明系統內存不足,需要增加系統內存

4、io

bi:塊設備每秒接收的塊數量,即讀磁盤,這里的塊設備是指系統上所有的磁盤和其他塊設備,默認塊大小是1024byte,單位kb/s

bo:表示寫到塊設備數據的總量,即寫磁盤,單位kb/s

注意:如果bi+bo的值過大,且wa值較大,則表示系統磁盤IO瓶頸

5、system

in:每秒CPU的中斷次數,包括時間中斷

cs:cpu每秒產生的上下文切換次數(cs自愿上下文切換\nvcs非自愿上下文切換)

例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,我們一般做性能測試時會進行幾千并發甚至幾萬并發的測試,選擇web服務器的進程可以由進程或者線程的峰值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要盡量避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU干正經事的時間少了,CPU沒有充分利用,是不可取的。

注意:

這兩個值越大,則由內核消耗的CPU就越多

6、CPU

us:表示用戶進程消耗的CPU時間百分比,us值越高,說明用戶進程消耗CPU時間越多,如果長期大于50%,則需要考慮優化程序或者算法

sy:表示系統內核進程消耗的CPU時間百分比,如果太高,表示系統調用時間長,例如是IO操作頻繁。

一般來說us+sy應該小于80%,如果大于80%,說明可能存在CPU瓶頸

id:表示CPU處在空間狀態的時間百分比

wa:表示等待所占用的CPU時間百分比,wa值越高,說明I/O等待越嚴重,根據經驗wa的參考值為20%,如果超過20%,說明I/O等待嚴重,引起I/O等待的原因可能是磁盤大量隨機讀寫造成的,也可能是磁盤或者監控器的貸款瓶頸(主要是塊操作)造成的

綜上所述,如果評估CPU,需要重點關注procs項的r列值和CPU項的us、sy、wa列的值

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容