vmstat的官方定義是:vmstat - Report virtual memory statistics,即虛擬記憶體的統計。 先來追根溯源: 什麼是虛擬記憶體? 答:虛擬記憶體就是磁碟上虛擬出來可以當記憶體使用的一個文件 為什麼要有虛擬記憶體? 答:程式需要經由記憶體來運行,如果程式執行時占用記憶體過多,內 ...
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暫時停止當前程式的執行轉而執行處理新情況的程式和執行過程。當發生中斷時會引起上下文切換