vmstat命令是最常見的linux/unix監控工具,可以展現給定時間間隔的伺服器的狀態值,包括伺服器的cpu使用率,mem記憶體使用,vmswap虛擬記憶體交換情況,io讀寫情況。
這個命令是檢視linux/unix最好的命令,乙個是linux/unix都支援,二是相比top,可以看到整個機器的cpu,記憶體,io的使用情況,而不是單單看到各個程序的cpu使用率和記憶體使用率(使用場景不一樣)。
工作原理:
在系統中執行的每個程序都需要使用到記憶體,但不是每個程序都需要每時每刻使用系統分配的記憶體空間。當系統執行所需記憶體超過實際的物理記憶體,核心會釋放某些程序所占用但未使用的部分或所有物理記憶體,將這部分資料儲存在磁碟上直到程序下一次呼叫,並將釋放出的記憶體提供給有需要的程序使用。
分頁(page)寫入磁碟的過程被稱作page-out,分頁(page)從磁碟重新回到記憶體的過程被稱作page-in。當核心需要乙個分頁時,但發現此分頁不在物理記憶體中(因為已經被page-out了),此時就發生了分頁錯誤(page fault)。
當系統核心發現可執行記憶體變少時,就會通過page-out來釋放一部分物理記憶體。儘管page-out不是經常發生,但是如果page-out頻繁不斷的發生,直到當核心管理分頁的時間超過執行程式的時間時,系統效能會急劇下降。這時的系統已經執行非常慢或進入暫停狀態,這種狀態亦被稱作thrashing(顛簸)。
命令示例
vmstat工具的使用是通過兩個數字引數來完成的,第乙個引數是取樣的時間間隔數(單位是秒);第二個引數是取樣的次數,如:
root@ubuntu:~# vmstat 22表示每個兩秒採集一次伺服器狀態,1表示只採集一次。1procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa 10
03498472
315836
381954000
0120
001000
實際上,在應用過程中,我們會在一段時間內一直監控,不想監控直接結束vmstat就行了,例如:
root@ubuntu:~# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----這表示vmstat每2秒採集資料,一直採集直到我結束程式,這裡採集了5次資料我就結束了程式。r b swpd free buff cache si so bi bo in cs us sy id wa 10
03499840
315836
381966000
0120
00100000
03499584
315836
381966000
008815800
100000
03499708
315836
381966000
028616200
100000
03499708
315836
381966000
0108115100
100010
03499732
315836
381966000
028315400
1000
命令介紹完畢,每個引數的意思:
r表示執行佇列(就是說多少個程序分配到cpu),測試的伺服器目前cpu比較空閒,沒什麼程式在跑,當這個值超過了cpu數目,就會出現cpu瓶頸了。這個也和top的負載有關係,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,伺服器的狀態很危險。top的負載類似每秒的執行佇列。如果執行佇列過大,表示你的cpu很繁忙,一般會造成cpu使用率很高。
b表示阻塞的程序,程序阻塞,大家懂的。
swpd虛擬記憶體已使用的大小,如果大於0表示你的機器物理記憶體不足了(記憶體耗盡了,開始使用虛擬記憶體空間了),如果不是程式記憶體洩露的原因,那麼你該公升級記憶體了或者把耗記憶體的任務遷移到其他機器。
free空閒的物理記憶體的大小,機器記憶體總共8g,剩餘3415m。
bufflinux/unix系統是用來儲存,目錄裡面有什麼內容,許可權等的快取,本機大概占用300多m
cache用來記憶我們開啟的檔案,給檔案做緩衝。本機大概占用300多m(這裡是linux/unix的聰明之處,把空閒的物理記憶體的一部分拿來做檔案和目錄的快取,是為了提高程式執行的效能,當程式使用記憶體時,buffer/cached會很快地被使用)
si每秒從磁碟讀入虛擬記憶體的大小,如果這個值大於0,表示物理記憶體不夠用或者記憶體洩露了,要查詢耗記憶體程序解決掉。我的機器記憶體充裕,一切正常。
so每秒虛擬記憶體寫入磁碟的大小,如果這個值大於0,同上。
bi塊裝置每秒接收的塊數量,這裡的塊裝置是指系統上所有的磁碟和其他塊裝置,預設塊大小是1024byte。本機上沒什麼io操作,所以一直是0,但是我曾在處理拷貝大量資料(2-3t)的機器上看過可以達到140000/s,磁碟寫入速度差不多140m每秒
bo塊裝置每秒傳送的塊數量,例如我們讀取檔案,bo就要大於0。bi和bo一般都要接近0,不然就是io過於頻繁,需要調整。
in每秒cpu的中斷次數,包括時間中斷,表示在某一時間間隔中觀測到的每秒裝置中斷數
cs每秒上下文切換次數,例如我們呼叫系統函式,就要進行上下文切換,執行緒的切換,也要程序上下文切換,這個值要越小越好,太大了要考慮調低執行緒或者程序的數目,例如在apache和nginx這種web伺服器中,我們一般做效能測試時會進行幾千併發甚至幾萬併發的測試,選擇web伺服器的程序可以由程序或者執行緒的峰值一直下調,壓測,直到cs到乙個比較小的值,這個程序和執行緒數就是比較合適的值了。系統呼叫也是,每次呼叫系統函式,我們的**就會進入核心空間,導致上下文切換,這個是很耗資源,也要盡量避免頻繁呼叫系統函式。上下文切換次數過多表示你的cpu大部分浪費在上下文切換,導致cpu幹正經事的時間少了,cpu沒有充分利用,是不可取的。
us使用者cpu時間,我曾經在乙個做加密解密很頻繁的伺服器上,可以看到us接近100,r執行佇列達到80(機器在做壓力測試,效能表現不佳)
sy系統cpu時間,如果太高,表示系統呼叫時間長,例如是io操作頻繁。
id空閒 cpu時間,一般來說,id + us + sy = 100,一般認為id是空閒cpu使用率,us是使用者cpu使用率,sy是系統cpu使用率。
wt等待io cpu時間。
命令: man vmstat
Linux vmstat命令詳解
vmstat是乙個十分有用的linux系統監控工具,使用vmstat命令可以得到關於程序 記憶體 記憶體分頁 堵塞io traps及cpu活動的資訊。一 前言 二 虛擬記憶體執行原理 在系統中執行的每個程序都需要使用到記憶體,但不是每個程序都需要每時每刻使用系統分配的記憶體空間。當系統執行所需記憶體...
Linux vmstat 命令詳解
vmstat命令是最常見的linux unix監控工具,可以展現給定時間間隔的伺服器的狀態值,包括伺服器的cpu使用率,mem記憶體使用,vmswap虛擬記憶體交換情況,io讀寫情況。這個命令是檢視linux unix最好的命令,乙個是linux unix都支援,二是相比top,可以看到整個機器的c...
Linux vmstat 命令詳解
vmstat vmstat 是兩次執行之間的時間間隔,以秒為單位。是 vmstat 重複的次數。下面是當我們希望 vmstat 每隔 5 秒執行一次並在第 10 次執行後停止時的示例。每 5 秒之後都會輸出一行並顯示此時的統計資訊。vmstat 5 10 procs memory swap io s...