Linux vmstat命令詳解

前言

Linux命令千千萬(wàn),而我們?cè)谌粘9ぷ髦姓嬲媲星杏玫降拿顟?yīng)該不超過(guò)50個(gè),在接下來(lái)的日子里,我會(huì)對(duì)我經(jīng)常使用的命令,以及使用過(guò)程中不熟悉的命令進(jìn)行一個(gè)總結(jié),一是自我總結(jié),加深記憶;二是和大家分享。

vmstat是Virtual Meomory Statistics(虛擬內(nèi)存統(tǒng)計(jì))的縮寫(xiě),可對(duì)操作系統(tǒng)的虛擬內(nèi)存、進(jìn)程、CPU活動(dòng)進(jìn)行監(jiān)控。它是對(duì)系統(tǒng)的整體情況進(jìn)行統(tǒng)計(jì),不足之處是無(wú)法對(duì)某個(gè)進(jìn)程進(jìn)行深入分析。vmstat工具提供了一種低開(kāi)銷(xiāo)的系統(tǒng)性能觀察方式。因?yàn)関mstat本身就是低開(kāi)銷(xiāo)工具,在非常高負(fù)荷的服務(wù)器上,你需要查看并監(jiān)控系統(tǒng)的健康情況,在控制窗口還是能夠使用vmstat輸出結(jié)果。

虛擬內(nèi)存原理

上面說(shuō)到了vmstat是虛擬內(nèi)存統(tǒng)計(jì)工具,那咱就不得不說(shuō)一說(shuō)虛擬內(nèi)存原理。

在系統(tǒng)中運(yùn)行的每個(gè)進(jìn)程都需要使用到內(nèi)存,但不是每個(gè)進(jìn)程都需要每時(shí)每刻使用系統(tǒng)分配的內(nèi)存空間。當(dāng)系統(tǒng)運(yùn)行所需內(nèi)存超過(guò)實(shí)際的物理內(nèi)存,內(nèi)核會(huì)釋放某些進(jìn)程所占用但未使用的部分或所有物理內(nèi)存,將這部分資料存儲(chǔ)在磁盤(pán)上直到進(jìn)程下一次調(diào)用,并將釋放出的內(nèi)存提供給有需要的進(jìn)程使用。

在Linux內(nèi)存管理中,主要是通過(guò)“調(diào)頁(yè)P(yáng)aging”和“交換Swapping”來(lái)完成上述的內(nèi)存調(diào)度。調(diào)頁(yè)算法是將內(nèi)存中最近不常使用的頁(yè)面換到磁盤(pán)上,把活動(dòng)頁(yè)面保留在內(nèi)存中供進(jìn)程使用。交換技術(shù)是將整個(gè)進(jìn)程,而不是部分頁(yè)面,全部交換到磁盤(pán)上。

分頁(yè)(Page)寫(xiě)入磁盤(pán)的過(guò)程被稱(chēng)作Page-Out,分頁(yè)(Page)從磁盤(pán)重新回到內(nèi)存的過(guò)程被稱(chēng)作Page-In。當(dāng)內(nèi)核需要一個(gè)分頁(yè)時(shí),但發(fā)現(xiàn)此分頁(yè)不在物理內(nèi)存中(因?yàn)橐呀?jīng)被Page-Out了),此時(shí)就發(fā)生了分頁(yè)錯(cuò)誤(Page Fault)。

當(dāng)系統(tǒng)內(nèi)核發(fā)現(xiàn)可運(yùn)行內(nèi)存變少時(shí),就會(huì)通過(guò)Page-Out來(lái)釋放一部分物理內(nèi)存。經(jīng)管Page-Out不是經(jīng)常發(fā)生,但是如果Page-out頻繁不斷的發(fā)生,直到當(dāng)內(nèi)核管理分頁(yè)的時(shí)間超過(guò)運(yùn)行程式的時(shí)間時(shí),系統(tǒng)效能會(huì)急劇下降。這時(shí)的系統(tǒng)已經(jīng)運(yùn)行非常慢或進(jìn)入暫停狀態(tài),這種狀態(tài)亦被稱(chēng)作thrashing(顛簸)。

命令詳解

vmstat常用命令格式如下:

vmstat [-a] [-n] [-S unit] [delay [ count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [ count]]
vmstat [-d] [-n] [delay [ count]]
vmstat [-p disk partition] [-n] [delay [ count]]
vmstat [-f]
vmstat [-V]

命令選項(xiàng)說(shuō)明如下:

-a:顯示活躍和非活躍內(nèi)存
-f:顯示從系統(tǒng)啟動(dòng)至今的fork數(shù)量 。
-m:顯示slabinfo
-n:只在開(kāi)始時(shí)顯示一次各字段名稱(chēng)。
-s:顯示內(nèi)存相關(guān)統(tǒng)計(jì)信息及多種系統(tǒng)活動(dòng)數(shù)量。
delay:刷新時(shí)間間隔。如果不指定,只顯示一條結(jié)果。
count:刷新次數(shù)。如果不指定刷新次數(shù),但指定了刷新時(shí)間間隔,這時(shí)刷新次數(shù)為無(wú)窮。
-d:顯示磁盤(pán)相關(guān)統(tǒng)計(jì)信息。
-p:顯示指定磁盤(pán)分區(qū)統(tǒng)計(jì)信息
-S:使用指定單位顯示。參數(shù)有 k 、K 、m 、M,分別代表1000、1024、1000000、1048576字節(jié)(byte)。默認(rèn)單位為K(1024 bytes)
-V:顯示vmstat版本信息。
下面就對(duì)我們常用的使用方式進(jìn)行詳細(xì)的總結(jié)。

使用實(shí)例

輸入命令:vmstat 1

輸出結(jié)果:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 3 0 361396 196772 55820 359372 0 0 13 21 1 1 2 0 98 0 0 1 0 361392 196524 55820 359616 8 0 236 0 411 527 1 0 90 9 0 2 1 361392 196524 55828 359608 0 0 0 48 370 503 1 1 98 0 0 4 0 361392 196524 55828 359616 0 0 0 0 442 559 1 0 99 0 0

字段說(shuō)明:

procs(進(jìn)程)
r:當(dāng)前運(yùn)行隊(duì)列中線(xiàn)程的數(shù)目,代表線(xiàn)程處于可運(yùn)行狀態(tài),但CPU還未能執(zhí)行.,這個(gè)值可以作為判斷CPU是否繁忙的一個(gè)指標(biāo);當(dāng)這個(gè)值超過(guò)了CPU數(shù)目,就會(huì)出現(xiàn)CPU瓶頸了;這個(gè)我們可以結(jié)合top命令的負(fù)載值同步評(píng)估系統(tǒng)性能;
b:等待IO的進(jìn)程數(shù)量;如果該值一直都很大,說(shuō)明IO比較繁忙,處理較慢;
memory(內(nèi)存)
swpd:虛擬內(nèi)存已使用的大??;如果swpd的值不為0,但是si,so的值長(zhǎng)期為0,這種情況不會(huì)影響系統(tǒng)性能;
free:空閑的物理內(nèi)存的大??;
buff:用作緩沖的內(nèi)存大??;
cache:用作緩存的內(nèi)存大小;如果cache的值大的時(shí)候,說(shuō)明cache處的文件數(shù)多,如果頻繁訪問(wèn)到的文件都能被cache處,那么磁盤(pán)的讀IO bi會(huì)非常??;
swap(交換空間,單位:KB);內(nèi)存夠用的時(shí)候,這2個(gè)值都是0,如果這2個(gè)值長(zhǎng)期大于0時(shí),系統(tǒng)性能會(huì)受到影響,磁盤(pán)IO和CPU資源都會(huì)被消耗。有時(shí)我們看到空閑內(nèi)存(free)很少的或接近于0時(shí),就認(rèn)為內(nèi)存不夠用了,不能光看這一點(diǎn),還要結(jié)合si和so,如果free很少,但是si和so也很少(大多時(shí)候是0),那么不用擔(dān)心,系統(tǒng)性能這時(shí)不會(huì)受到影響的;
si:每秒從交換區(qū)寫(xiě)到內(nèi)存的大?。?br> so:每秒寫(xiě)入交換區(qū)的內(nèi)存大??;
io(單位:塊/秒)
bi:每秒讀取的塊數(shù);
bo:每秒寫(xiě)入的塊數(shù);隨機(jī)磁盤(pán)讀寫(xiě)的時(shí)候,這2個(gè)值越大,能看到CPU在IO等待的值也會(huì)越大;
system(系統(tǒng));這2個(gè)值越大,會(huì)看到由內(nèi)核消耗的CPU時(shí)間會(huì)越大;
in:每秒中斷數(shù),包括時(shí)鐘中斷;
cs:每秒上下文切換數(shù);
cpu(以百分比表示)
us:用戶(hù)進(jìn)程執(zhí)行時(shí)間(user time);
sy:系統(tǒng)進(jìn)程執(zhí)行時(shí)間(system time);
id:空閑時(shí)間(包括IO等待時(shí)間);
wa:等待IO時(shí)間;wa的值高時(shí),說(shuō)明IO等待比較嚴(yán)重,這可能由于磁盤(pán)大量作隨機(jī)訪問(wèn)造成,也有可能磁盤(pán)出現(xiàn)瓶頸。

總結(jié)

關(guān)于Linux vmstat命令總結(jié)的文章有很多,但是我還是抽出半個(gè)小時(shí)重新整理了一遍,我在整理我這篇文章時(shí),參考了網(wǎng)上了部分文章,這也是一個(gè)重新學(xué)習(xí)的機(jī)會(huì),希望我的總結(jié),能給大家不一樣的幫助,不一樣的感覺(jué)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 Linux命令千千萬(wàn),而我們?cè)谌粘9ぷ髦姓嬲媲星杏玫降拿顟?yīng)該不超過(guò)50個(gè),在接下來(lái)的日子里,我會(huì)對(duì)我經(jīng)常使...
    塵世不擾閱讀 274評(píng)論 0 2
  • vmstat命令是最常見(jiàn)的Linux/Unix監(jiān)控工具,可以展現(xiàn)給定時(shí)間間隔的服務(wù)器的狀態(tài)值,包括服務(wù)器的CPU使...
    jerrik閱讀 296評(píng)論 0 1
  • 轉(zhuǎn) # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    呂品?閱讀 10,123評(píng)論 0 44
  • vmstat命令是最常見(jiàn)的Linux/Unix監(jiān)控工具,可以展現(xiàn)給定時(shí)間間隔的服務(wù)器的狀態(tài)值,包括服務(wù)器的CPU使...
    高美麗閱讀 411評(píng)論 1 0
  • 這篇文章主要介紹一些常用的linux服務(wù)器性能監(jiān)控命令,包括命令的常用參數(shù)、指標(biāo)的含義以及一些交互操作。 幾個(gè)問(wèn)題...
    dancingking閱讀 8,489評(píng)論 6 22

友情鏈接更多精彩內(nèi)容