vmstat的官方定義是:vmstat - Report virtual memory statistics,即虛擬內存的統計。
先來追根溯源:
什麼是虛擬內存?
答:虛擬內存就是磁盤上虛擬出來可以當內存使用的一個文件
為什麼要有虛擬內存?
答:程序需要經由內存來運行,如果程序執行時占用內存過多,內存耗盡,就會影響程序運行,在這種情況下,虛擬內存就會站出來——調用硬盤空間來充當內存,緩解內存緊張的狀態,使程序順利的運行下去。但是經由硬盤的讀取遠不如直接從內存來讀取的效率高(所以有條件的話多買點內存條)
進入正題:
vmstat的監控項有什麼?
答:進程,內存,分頁,塊I/O,traps和CPU活動
vmstat的參數?
-V prints version. 顯示版本號
-n causes the headers not to be reprinted regularly. 字段名稱只顯示一次
-a print inactive/active page stats. 顯示非活躍/活躍內存
-d prints disk statistics 顯示磁盤數據信息
-D prints disk table 顯示磁盤統計表
-p prints disk partition statistics 顯示磁盤分區信息
如:[root@localhost /]# vmstat -p /dev/sda2
sda2 reads read sectors writes requested writes
41788 1781810 22914859 360923320
-s prints vm table 顯示內存相關統計信息和各種活動數量
-m prints slabinfo 顯示slabinfo信息,slab是Linux的一種內存分配機制,不具體關注了
-t add timestamp to output 在結果中顯示時間
-S unit size 指定內存顯示的單位,單位有k,K,m,M(1000, 1024, 1000000, or 1048576 bytes)
vmstat的結果解釋:
[root@localhost /]# vmstat -S m
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
procs r 運行和等待CPU的進程數
b 等待資源的進程數
memory swpd 虛擬內存使用量
free 空閒內存量
buff 作為buff使用的內存
cache 作為cache使用的內存
swap si 從磁盤讀入虛擬內存的交換量
so 從虛擬內存寫入磁盤的交換量
IO bi 從塊設備讀入的數據總量,讀磁盤 kb/s
bo 從塊設備寫入的數據總量,寫磁盤 kb/s
system in 每秒中斷數
cs 每秒上下文切換次數
cpu us sy id wa 用戶消耗、系統消耗、空閒狀態、IO等待消耗百分比
st 虛擬機的cpu損耗
主要關注:
r 最好不要超過cpu總數,長期大於的話需要重點關注
b 長期很高時需要注意
swpd 最好不要大於0,如果大於0,接著看si,so,如果為0或很低的話,沒事
si,so 數值比較高,並且在不斷變化時,說明內存不夠了,內存中的數據頻繁交換到交換分區中,這往往對系統性能影響極大
bi,bo 數值高表示io壓力大
擴展知識:
1 進程有哪些狀態
答:進程是系統進行資源分配和調度的基本單位,它可以申請和擁有系統資源,是一個動態的概念。簡單可理解為“一個程序”被執行的過程即為“一個進程”,主要的狀態分為:就緒-運行-阻塞
就緒即為已獲得資源,正在等待獲取CPU;運行是獲得CPU後程序執行的狀態;阻塞是指進程等待某種條件(如I/O操作或進程同步),在條件滿足之前無法繼續執行的狀態
vmstat中的r和b可從中理解其原理
2 塊設備和字符設備
答:是i/o設備的兩大分類。塊設備將信息存儲在固定大小的塊中,每個塊都有自己的地址。數據塊的大小通常在512字節到32768字節之間。塊設備的基本特征是每個塊都能獨立於其它塊而讀寫。磁盤是最常見的塊設備;字符設備是指在I/O傳輸過程中以字符為單位進行傳輸的設備,例如鍵盤,打印機等
3 上下文切換
答:是指CPU從一個線程或進程切換到另一個線程或進程。CPU切換到另一個進程需要保存當前進程的狀態並恢復另一個進程的狀態:當前運行任務轉為就緒(或者掛起、刪除)狀態,另一個被選定的就緒任務成為當前任務。上下文切換包括保存當前任務的運行環境,恢復將要運行任務的運行環境。如果可運行的線程數大於CPU的數量,那麼OS會強行暫停正在執行的線程,從而使其他線程能夠使用CPU,這會引起上下文切換,而上下文切換會導致很大的CPU時間消耗,所以如果上下文切換頻繁時,需要關注
通常在三種情況下可能會發生上下文切換:中斷處理,多任務處理,用戶態切換
4 中斷
答:是指當出現需要時,CPU暫時停止當前程序的執行轉而執行處理新情況的程序和執行過程。當發生中斷時會引起上下文切換
如何通過閱讀源代碼了解 vmstat 中的指標 http://www.linuxidc.com/Linux/2016-01/127867.htm
Linux vmstat 命令詳解 http://www.linuxidc.com/Linux/2013-03/80983.htm
Linux下vmstat 顯示結果詳解 http://www.linuxidc.com/Linux/2013-01/77497.htm
Linux監控工具之vmstat 詳解 http://www.linuxidc.com/Linux/2012-09/71295.htm
Linux vmstat命令實戰詳解 http://www.linuxidc.com/Linux/2012-06/61771.htm
Linux vmstat監控系統負載 http://www.linuxidc.com/Linux/2012-01/51340.htm
vmstat命令詳解——Linux性能分析 http://www.linuxidc.com/Linux/2014-06/102884.htm