io监控
http://www.ha97.com/4512.html
一、前言
很顯然從名字中我們就可以知道vmstat是一個查看虛擬內(nèi)存(Virtual?Memory)使用狀況的工具,但是怎樣通過vmstat來發(fā)現(xiàn)系統(tǒng)中的瓶頸呢?在回答這個問題前,還是讓我們回顧一下Linux中關于虛擬內(nèi)存相關內(nèi)容。
二、虛擬內(nèi)存原理
在系統(tǒng)中運行的每個進程都需要使用到內(nèi)存,但不是每個進程都需要每時每刻使用系統(tǒng)分配的內(nèi)存空間。當系統(tǒng)運行所需內(nèi)存超過實際的物理內(nèi)存,內(nèi)核會釋放某些進程所占用但未使用的部分或所有物理內(nèi)存,將這部分資料存儲在磁盤上直到進程下一次調(diào)用,并將釋放出的內(nèi)存提供給有需要的進程使用。
在Linux內(nèi)存管理中,主要是通過“調(diào)頁Paging”和“交換Swapping”來完成上述的內(nèi)存調(diào)度。調(diào)頁算法是將內(nèi)存中最近不常使用的頁面換到磁盤上,把活動頁面保留在內(nèi)存中供進程使用。交換技術是將整個進程,而不是部分頁面,全部交換到磁盤上。
分頁(Page)寫入磁盤的過程被稱作Page-Out,分頁(Page)從磁盤重新回到內(nèi)存的過程被稱作Page-In。當內(nèi)核需要一個分頁時,但發(fā)現(xiàn)此分頁不在物理內(nèi)存中(因為已經(jīng)被Page-Out了),此時就發(fā)生了分頁錯誤(Page Fault)。
當系統(tǒng)內(nèi)核發(fā)現(xiàn)可運行內(nèi)存變少時,就會通過Page-Out來釋放一部分物理內(nèi)存。經(jīng)管Page-Out不是經(jīng)常發(fā)生,但是如果Page-out頻繁不斷的發(fā)生,直到當內(nèi)核管理分頁的時間超過運行程式的時間時,系統(tǒng)效能會急劇下降。這時的系統(tǒng)已經(jīng)運行非常慢或進入暫停狀態(tài),這種狀態(tài)亦被稱作thrashing(顛簸)。
三、vmstat詳解
1.用法
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]
-a:顯示活躍和非活躍內(nèi)存
-f:顯示從系統(tǒng)啟動至今的fork數(shù)量 。
-m:顯示slabinfo
-n:只在開始時顯示一次各字段名稱。
-s:顯示內(nèi)存相關統(tǒng)計信息及多種系統(tǒng)活動數(shù)量。
delay:刷新時間間隔。如果不指定,只顯示一條結果。
count:刷新次數(shù)。如果不指定刷新次數(shù),但指定了刷新時間間隔,這時刷新次數(shù)為無窮。
-d:顯示磁盤相關統(tǒng)計信息。
-p:顯示指定磁盤分區(qū)統(tǒng)計信息
-S:使用指定單位顯示。參數(shù)有 k 、K 、m 、M ,分別代表1000、1024、1000000、1048576字節(jié)(byte)。默認單位為K(1024 bytes)
-V:顯示vmstat版本信息。
2.使用說明
例子1:每3秒輸出一條結果
字段說明:
Procs(進程):
r: 運行隊列中進程數(shù)量,這個值也可以判斷是否需要增加CPU。指運行隊列中的進程數(shù),即表示正在運行或者正在等待CPU時間的進程數(shù),如果這個參數(shù)值超過服務器上cpu的數(shù)量,就可能存在cpu瓶頸,有一些任務要等待執(zhí)行。當業(yè)務繁忙的時候,不超過2倍cpu數(shù)量,還是可以認為合理的。
b: 等待IO的進程數(shù)量
Memory(內(nèi)存):
swpd: 使用虛擬內(nèi)存大小
注意:如果swpd的值不為0,但是SI,SO的值長期為0,這種情況不會影響系統(tǒng)性能。
free: 空閑物理內(nèi)存大小
buff: 用作緩沖的內(nèi)存大小
cache: 用作緩存的內(nèi)存大小
注意:如果cache的值大的時候,說明cache處的文件數(shù)多,如果頻繁訪問到的文件都能被cache處,那么磁盤的讀IO bi會非常小。
Swap:
si: 每秒從交換區(qū)寫到內(nèi)存的大小,由磁盤調(diào)入內(nèi)存
so: 每秒寫入交換區(qū)的內(nèi)存大小,由內(nèi)存調(diào)入磁盤
注意:內(nèi)存夠用的時候,這2個值都是0,如果這2個值長期大于0時,系統(tǒng)性能會受到影響,磁盤IO和CPU資源都會被消耗。有些朋友看到空閑內(nèi)存(free)很少的或接近于0時,就認為內(nèi)存不夠用了,不能光看這一點,還要結合si和so,如果free很少,但是si和so也很少(大多時候是0),那么不用擔心,系統(tǒng)性能這時不會受到影響的。
IO:(現(xiàn)在的Linux版本塊的大小為1kb)
bi: 每秒讀取的塊數(shù)
bo: 每秒寫入的塊數(shù)
注意:隨機磁盤讀寫的時候,這2個值越大(如超出1024k),能看到CPU在IO等待的值也會越大。
系統(tǒng):
in: 每秒中斷數(shù),包括時鐘中斷。
cs: 每秒上下文切換數(shù)。
注意:上面2個值越大,會看到由內(nèi)核消耗的CPU時間會越大。
CPU(以百分比表示):
us: 用戶進程執(zhí)行時間百分比(user?time)
注意:?us的值比較高時,說明用戶進程消耗的CPU時間多,但是如果長期超50%的使用,那么我們就該考慮優(yōu)化程序算法或者進行加速。
sy: 內(nèi)核系統(tǒng)進程執(zhí)行時間百分比(system?time)
注意:sy的值高時,說明系統(tǒng)內(nèi)核消耗的CPU資源多,這并不是良性表現(xiàn),我們應該檢查原因。
wa: IO等待時間百分比
注意:wa的值高時,說明IO等待比較嚴重,這可能由于磁盤大量作隨機訪問造成,也有可能磁盤出現(xiàn)瓶頸(塊操作)。
id: 空閑時間百分比
例子2:顯示活躍和非活躍內(nèi)存
使用-a選項顯示活躍和非活躍內(nèi)存時,所顯示的內(nèi)容除增加inact和active外,其他顯示內(nèi)容與例子1相同。
字段說明:
Memory(內(nèi)存):
inact: 非活躍內(nèi)存大小(當使用-a選項時顯示)
active: 活躍的內(nèi)存大小(當使用-a選項時顯示)
總結:
目前說來,對于服務器監(jiān)控有用處的度量主要有:
r(運行隊列)
pi(頁導入)
us(用戶CPU)
sy(系統(tǒng)CPU)
id(空閑)
注意:如果r經(jīng)常大于4 ,且id經(jīng)常少于40,表示cpu的負荷很重。如果bi,bo 長期不等于0,表示內(nèi)存不足。
通過VMSTAT識別CPU瓶頸:
r(運行隊列)展示了正在執(zhí)行和等待CPU資源的任務個數(shù)。當這個值超過了CPU數(shù)目,就會出現(xiàn)CPU瓶頸了。
Linux下查看CPU核心數(shù)的命令:
cat /proc/cpuinfo|grep processor|wc -l
當r值超過了CPU個數(shù),就會出現(xiàn)CPU瓶頸,解決辦法大體幾種:
1. 最簡單的就是增加CPU個數(shù)和核數(shù)
2. 通過調(diào)整任務執(zhí)行時間,如大任務放到系統(tǒng)不繁忙的情況下進行執(zhí)行,進爾平衡系統(tǒng)任務
3. 調(diào)整已有任務的優(yōu)先級
通過vmstat識別CPU滿負荷:
首先需要聲明一點的是,vmstat中CPU的度量是百分比的。當us+sy的值接近100的時候,表示CPU正在接近滿負荷工作。但要注意的是,CPU 滿負荷工作并不能說明什么,Linux總是試圖要CPU盡可能的繁忙,使得任務的吞吐量最大化。唯一能夠確定CPU瓶頸的還是r(運行隊列)的值。
總結就是:
r,b是看cpu是否夠用或者IO是否頻繁
swap: so, si 是看內(nèi)存是否夠用,是否需要頻繁換入換出。內(nèi)存夠用的時候,長期為0
io:bi,bo是看讀寫是否頻繁
linux/unix平臺下查看總的磁盤IO情況的工具很多,其中最為常用的優(yōu)秀工具是iostat。該工具是sysstat工具包里的一個工具,但iostat在針對每個進程或線程的具體IO使用情況時顯的很無力。在這邊方面iotop就顯的很靈活,iotop的顯示方式上繼承了經(jīng)典工具top的顯示界面。
Iotop 使用 Python 語言編寫而成,要求 Python 2.5(及以上版本)和 Linux kernel 2.6.20(及以上版本)。在centos/redhat/ubuntu平臺下我們都可以很方便的在源里找到相應的包。
安裝方式為:
yum -y install iotop 和 sudo apt-get install iotop當然也可以選擇源碼包安裝。其官方主頁為:http://guichaz.free.fr/iotop/? (該站還有其他幾個不錯的python寫的工具。)
啰嗦了半天,上個圖先:
?其參數(shù)有以下幾個:
用法 iotop -參數(shù)
–version 查看版本信息的
-h, –help 查看幫助信息的
-o, –only 只顯示在劃硬盤的程序
-b, –batch 批量處理 用來記錄日志的
-n NUM? 設定循環(huán)幾次
-d SEC, –delay=SEC? 設定顯示時間間隔
其中按 r 是反順序排列,按 o 為動態(tài)切換,按q退出。
總結
- 上一篇: 系统性能监控
- 下一篇: 基于B/S模式的推送