LINUX 查看當前系統的內存使用情況 vmstat
Linux vmstat 命令
Vmstat命令是最常見的Linux/Unix監控工具,可以展現給定時間間隔的服務器的狀態值,包括服務器的CPU使用率,內存使用,虛擬內存交換情況,IO讀寫情況。
相比top,我可以看到整個機器的CPU,內存,IO的使用情況,而不是單單看到各個進程的CPU使用率和內存使用率(使用場景不一樣)。
> vmstat
[[email protected] ~]$ 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 0 323208 290276 5500528 0 0 0 2 0 0 0 0 100 0 0
一般、vmstat工具的使用是通過兩個參數來完成的、
第一個參數為采樣的時間、單位是秒、第二個采樣的次數
> vmstat 2 1 // 表示:每隔兩秒、采集一次服務器狀態
[[email protected] ~]$ vmstat 2 1
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 0 323084 290276 5500528 0 0 0 2 0 0 0 0 100 0 0
實際項目中、我們一般是在一段時間內一直監控、不想監控、直接結束就ok;
> vmstat 2 // 表示每隔兩秒采集一次數據、一直采集(直到主動結束程序)
[[email protected] ~]$ vmstat 2
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 0 323208 290276 5500528 0 0 0 2 0 0 0 0 100 0 0
0 0 0 323192 290276 5500528 0 0 0 0 248 341 0 0 100 0 0
0 0 0 323192 290276 5500528 0 0 0 0 225 333 0 0 100 0 0
2 0 0 323192 290276 5500528 0 0 0 0 225 332 0 0 100 0 0
^C
具體的、每一個參數所代表的內容如下:
r
表示運行隊列;
當這個值超過了CPU數目,就會出現CPU瓶頸了;
一般負載超過了3就高了、超過了5個就比較高、超過了10個就不正常了、服務器就比較危險了;
top的負載類似每秒運行的隊列。如果隊列過大、表示CPU很忙、
b
表示阻塞的進程、
swpd
表示虛擬內存使用的大小
如果大於0、表示機器物理內存不足、如果不是內存泄漏的原因、就應該升級內存、或者遷移內存;
free
表示空閑內存的大小
buff
表示用來存儲目錄裏面的內容、權限等緩存;
cache
表示緩存的大小、cache直接用來記錄我們打開的文件、給文件做緩存;
(將空閑的物理內存的一部分拿來坐文件和目錄的緩存、提高程序執行的性能)
(當程序使用內存時、buff/cache會很快地被使用)
si
表示每秒從磁盤讀入虛擬內存的大小;
如果這個值大於0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉;
so
表示每秒虛擬內存寫入磁盤的大小;
bi
表示塊設備每秒接收的塊數量;
這裏的塊設備是指系統上所有的磁盤和其他塊設備;
bo
表示塊設備每秒發送的塊數量;
例如我們讀取文件,bo就要大於0。bi和bo一般都要接近0,不然就是IO過於頻繁,需要調整。
in
表示每秒CPU的中斷次數、包括時間中斷;
cs
表示每秒上下文切換次數、
當調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換;
這個值要越小越好,太大了,要考慮調低線程或者進程的數目;
us
表示用戶CPU時間、
sy
表示系統CPU時間;
如果太高,表示系統調用時間長
id
表示空閑CPU時間;
一般的 id + us + sy = 100
可以理解為:id是空閑CPU使用率、us是用戶CPU使用率、sy是系統CPU使用率;
wt
表示等待IO、CPU時間;
LINUX 查看當前系統的內存使用情況 vmstat