衆所周知,計算機必須有稱之為ram(随機通路記憶體)的存儲器使得計算機工作。ram指的是插在計算機主機闆上的實體存儲。這裡的ram被用于加載像浏覽器、文字處理器這類的程式,實際上,你使用的程式都運作在記憶體上。
讓我們假設你有2gb的記憶體。當你在運作作業系統時,你的可用記憶體可能隻有1.5gb。接着你使用了大量的程式。當記憶體使用滿之後,你可能再也無法加載更多的程式。淺顯地說,計算機可能會說:"抱歉,你不能在運作更多的程式了,如果你還要運作其他的程式請先關閉一些程式。"

為了解決這個問題,包括linux在内的各種作業系統使用了一個稱之為虛拟記憶體的方法。這個方法會搜尋最近不在使用的程式的記憶體區域,接着将它們拷貝到計算機硬碟上。這會騰出一些剩餘記憶體空間給你有機會運作更多的程式。
為了監視虛拟記憶體的活動,我們使用vmstat工具。
<a target="_blank"></a>
vmstat是一個提供報告虛拟記憶體統計的工具。它包括了系統記憶體、交換和實時處理器使用率。
為了運作vmstat,隻需在控制台輸入vmstat。不帶參數運作vmstat會顯示vmstat的預設結果。
讓我們看下如何了解vmstat提供的資訊:
procs有 r列和b列。r列代表等待通路cpu的程序數量。而b列意味着睡眠程序的數量。在這些列的下面,是它們的值。從上面的截圖中,我門有2個程序正在等待通路cpu,0個睡眠程序。
memory有swpd、 free、 buff 和 cache 這些列。這些資訊和指令free -m相同。swpd列顯示了有多少記憶體已經被交換到了交換檔案或者磁盤。free列顯示了未配置設定的可用記憶體。buff列顯示了使用中的記憶體。cache列顯示了有多少記憶體可以被交換到交換檔案或者磁盤上如果一些應用需要他們。
swap顯示了從交換系統上發送或取回了多少記憶體。si列告訴我們每秒有多少記憶體被從swap移到真實記憶體中(in)。so列告訴我們每秒有多少記憶體被從真實記憶體移到swap中(out)。
io依據塊的讀寫顯示了每秒輸入輸出的活動。bi列告訴我們收到的塊數量,bo列告訴我們發送的塊數量。
system顯示了每秒的系統操作數量。in列顯示了系統每秒被中斷的數量。cs列顯示了系統為了處理是以任務而上下文切換的數量。
cpu告訴了我們cpu資源的使用情況。us列顯示了處理器在非核心程式消耗的時間。sy列顯示了處理器在核心相關任務上消耗的時間。id列顯示了處理器的空閑時間。wa列顯示了處理器在等待io操作完成以繼續處理任務上的時間。
作為一個統計工具,使用vmstat最好的方法是使用間隔時間。你可以間斷地捕捉系統狀态。讓我假設以5秒的間隔運作vmstat。隻需要在你的控制台中輸入vmstat 5就行。
指令将會每5秒運作一次,直到你按下ctrl-c來終止它。你也可以使用第二個參數來控制vmstat運作的次數。
上面的指令會以5秒的間隔運作7次vmstat。
要這麼做,你可以在vmstat後加入-a選項。這是個示例。
如果你想,vmstat也可以列印系統磁盤活動統計。使用-d選項就行。
你可以選擇你想列印的顯示機關字元。在-s後跟上k (小寫,1000)、 k (大寫,1024)、 m (小寫,1000000)、 m (大寫,1048576) 位元組. 如果你不想選擇機關,預設使用的是k (1024)。
要這麼做,你可以使用-p選項跟上裝置名。這裡有個例子。
vmstat實際上是使用這些檔案擷取的資料。
如果你感覺系統運作超出記憶體了,在你增加實體記憶體前,這個工具可以幫助你确定問題的根本原因。通常上,你可以在控制台中輸入man vmstat擷取更多的關于vmstat的詳細資訊,這會為你顯示vmstat的手冊頁。
原文釋出時間為:2014-01-13
本文來自雲栖社群合作夥伴“linux中國”