vmstat簡介
vmstat命令是最常見的Linux/Unix監(jiān)控工具,可以展現(xiàn)給定時間間隔的服務器的狀態(tài)值,包括服務器的CPU使用率秸侣,內(nèi)存使用宠互,虛擬內(nèi)存交換情況,IO讀寫情況。相比top予跌,可以看到整個機器的CPU,內(nèi)存,IO的使用情況,而不是單單看到各個進程的CPU使用率和內(nèi)存使用率(使用場景不一樣)
命令簡單用法
一般vmstat工具的使用是通過兩個數(shù)字參數(shù)來完成的频轿,第一個參數(shù)是采樣的時間間隔數(shù)烁焙,單位是秒,第二個參數(shù)是采樣的次數(shù)
[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次,小面的每一行實際的數(shù)字就是每次采樣的數(shù)據(jù)九火。
如果想在一段時間內(nèi)連續(xù)監(jiān)控,則不需要加采樣次數(shù)的參數(shù)考榨,就會一直采樣鹦倚,直至手動結(jié)束河质。
vmstat各字段說明
1震叙、procs-進程相關(guān)
r:表示運行和等待CPU時間片的進程數(shù)(就是說多少個進程真的分配到CPU),這個值如果長期大于系統(tǒng)CPU個數(shù)乐尊,說明CPU不足划址,需要增加CPU
b:顯示多少進程在不可中斷的休眠限府,表示在等待資源的進程數(shù)痢缎,比如正在等待I/O或者內(nèi)存交換等。
2独旷、memory--內(nèi)存相關(guān)
swpd:表示切換到內(nèi)存交換區(qū)的內(nèi)存大小,即虛擬內(nèi)存已使用的大邪钙!(單位KB)麻养,如果大于0,表示你的機器物理內(nèi)存不足了回溺,如果不是程序內(nèi)存泄露的原因混萝,那么你該升級內(nèi)存了或者把耗內(nèi)存的任務遷移到其他機器。
free:表示當前空閑的物理內(nèi)存
buff:表示baffers cached內(nèi)存大小车要,也就是緩沖大小崭倘,一般對塊設備的讀寫才需要緩沖
Cache:表示page cached的內(nèi)存大小,也就是緩存大小司光,一般作為文件系統(tǒng)進行緩沖,頻繁訪問的文件都會被緩存榆俺,如果cache值非常大說明緩存文件比較多坞淮,如果此時io中的bi比較小,說明文件系統(tǒng)效率比較好(Linux/Unix的聰明之處回窘,把空閑的物理內(nèi)存的一部分拿來做文件和目錄的緩存,是為了提高 程序執(zhí)行的性能烁涌,當程序使用內(nèi)存時,buffer/cached會很快地被使用)
3撮执、swap--交換分區(qū)
si:每秒從磁盤讀入虛擬內(nèi)存的大小,如果這個值大于0县忌,表示物理內(nèi)存不夠用或者內(nèi)存泄露了继效,要查找耗內(nèi)存進程解決掉。
so:每秒虛擬內(nèi)存寫入磁盤的大小瑞信。
注意:一般情況下si、so的值都為0凡简,如果si、so的值長期不為0帜乞,則說明系統(tǒng)內(nèi)存不足筐眷,需要增加系統(tǒng)內(nèi)存
4、io
bi:塊設備每秒接收的塊數(shù)量匀谣,即讀磁盤,這里的塊設備是指系統(tǒng)上所有的磁盤和其他塊設備烈炭,默認塊大小是1024byte宝恶,單位kb/s
bo:表示寫到塊設備數(shù)據(jù)的總量,即寫磁盤卑惜,單位kb/s
注意:如果bi+bo的值過大,且wa值較大更米,則表示系統(tǒng)磁盤IO瓶頸
5毫痕、system
in:每秒CPU的中斷次數(shù)迟几,包括時間中斷
cs:cpu每秒產(chǎn)生的上下文切換次數(shù)(cs自愿上下文切換\nvcs非自愿上下文切換)
例如我們調(diào)用系統(tǒng)函數(shù)栏笆,就要進行上下文切換,線程的切換蛉加,也要進程上下文切換,這個值要越小越好厂抽,太大了丁眼,要考慮調(diào)低線程或者進程的數(shù)目,例如在apache和nginx這種web服務器中,我們一般做性能測試時會進行幾千并發(fā)甚至幾萬并發(fā)的測試苞七,選擇web服務器的進程可以由進程或者線程的峰值一直下調(diào),壓測卢厂,直到cs到一個比較小的值硫眨,這個進程和線程數(shù)就是比較合適的值了。系統(tǒng)調(diào)用也是,每次調(diào)用系統(tǒng)函數(shù)族奢,我們的代碼就會進入內(nèi)核空間,導致上下文切換棚品,這個是很耗資源廊敌,也要盡量避免頻繁調(diào)用系統(tǒng)函數(shù)。上下文切換次數(shù)過多表示你的CPU大部分浪費在上下文切換骡澈,導致CPU干正經(jīng)事的時間少了,CPU沒有充分利用囤锉,是不可取的。
注意:
這兩個值越大官地,則由內(nèi)核消耗的CPU就越多
6、CPU
us:表示用戶進程消耗的CPU時間百分比赤炒,us值越高亏较,說明用戶進程消耗CPU時間越多,如果長期大于50%宴杀,則需要考慮優(yōu)化程序或者算法
sy:表示系統(tǒng)內(nèi)核進程消耗的CPU時間百分比,如果太高旷余,表示系統(tǒng)調(diào)用時間長扁达,例如是IO操作頻繁。
一般來說us+sy應該小于80%跪解,如果大于80%,說明可能存在CPU瓶頸
id:表示CPU處在空間狀態(tài)的時間百分比
wa:表示等待所占用的CPU時間百分比窘行,wa值越高图仓,說明I/O等待越嚴重,根據(jù)經(jīng)驗wa的參考值為20%救崔,如果超過20%,說明I/O等待嚴重纬黎,引起I/O等待的原因可能是磁盤大量隨機讀寫造成的劫窒,也可能是磁盤或者監(jiān)控器的貸款瓶頸(主要是塊操作)造成的
綜上所述,如果評估CPU,需要重點關(guān)注procs項的r列值和CPU項的us懂拾、sy铐达、wa列的值