在Linux下有很多系統(tǒng)性能分析工具,比較常見的有top、free、ps、time、timex、uptime等。下文將介紹幾個較為重要的性能分析工具vmstat、iostat和sar及其使用。
用vmstat監(jiān)視內(nèi)存使用情況
vmstat是Virtual Meomory Statistics(虛擬內(nèi)存統(tǒng)計)的縮寫,可對操作系統(tǒng)的虛擬內(nèi)存、進(jìn)程、CPU活動進(jìn)行監(jiān)視。它是對系統(tǒng)的整體情況進(jìn)行統(tǒng)計,不足之處是無法對某個進(jìn)程進(jìn)行深入分析。
首先,什么是virtual memory? 簡單的說,linux支持應(yīng)用程序使用比實(shí)際內(nèi)存更大的內(nèi)存空間,這是通過將硬盤上一個特定的分區(qū)(swap分區(qū))或者一個特定的文件作為內(nèi)存的擴(kuò)展來做到的。當(dāng)實(shí)際內(nèi)存不夠用時,linux根據(jù)某種策略,將內(nèi)存中的部分空間寫到交換分區(qū)以便留出應(yīng)用程序運(yùn)行所需要的內(nèi)存空間(參考:Understanding Virtual Memory , What is Vitual Memory)。但是,一旦開始使用交換空間,磁盤活動自然就多起來,cpu利用率就降低下來(因?yàn)榇疟P的速度比內(nèi)存和cpu慢多了)。這就是為什么vmstat會同時顯示磁盤和cpu活動情況的原因。
vmstat的語法如下:
CODE:
vmstat [-V] [-n] [delay [count]]
[Copy to clipboard]
其中,-V表示打印出版本信息;-n表示在周期性循環(huán)輸出時,輸出的頭部信息僅顯示一次;delay是兩次輸出之間的延遲時間;count是指按照這個時間間隔統(tǒng)計的次數(shù)。
vmstat輸出的各個字段的含義可以參考man vmstat的解釋,下面就我的理解說一下vmstat常用的幾種使用方式。
1、觀察磁盤活動情況
磁盤活動情況主要從以下幾個指標(biāo)了解:
bi:表示從磁盤每秒讀取的塊數(shù)(blocks/s)。數(shù)字越大,表示讀磁盤的活動越多。
bo:表示每秒寫到磁盤的塊數(shù)(blocks/s)。數(shù)字越大,表示寫磁盤的活動越多。
wa:cpu等待磁盤I/O(未決的磁盤IO)的時間比例。數(shù)字越大,表示文件系統(tǒng)活動阻礙cpu的情況越嚴(yán)重,因?yàn)閏pu在等待慢速的磁盤系統(tǒng)提供數(shù)據(jù)。wa為0是最理想的。如果wa經(jīng)常大于10,可能文件系統(tǒng)就需要進(jìn)行性能調(diào)整了。
procs:
r-->在運(yùn)行隊(duì)列中等待的進(jìn)程數(shù)
b-->在等待io的進(jìn)程數(shù)
w-->可以進(jìn)入運(yùn)行隊(duì)列但被替換的進(jìn)程
memoy
swap-->現(xiàn)時可用的交換內(nèi)存(k表示)
free-->空閑的內(nèi)存(k表示)
pages
re--》回收的頁面
mf--》非嚴(yán)重錯誤的頁面
pi--》進(jìn)入頁面數(shù)(k表示)
po--》出頁面數(shù)(k表示)
fr--》空余的頁面數(shù)(k表示)
de--》提前讀入的頁面中的未命中數(shù)
sr--》通過時鐘算法掃描的頁面
disk 顯示每秒的磁盤操作。 s表示scsi盤,0表示盤號
fault 顯示每秒的中斷數(shù)
in--》設(shè)備中斷
sy--》系統(tǒng)中斷
cy--》cpu交換
cpu 表示cpu的使用狀態(tài)
cs--》用戶進(jìn)程使用的時間
sy--》系統(tǒng)進(jìn)程使用的時間
id--》cpu空閑的時間
如果 r經(jīng)常大于 4 ,且id經(jīng)常少于40,表示cpu的負(fù)荷很重。
如果pi,po 長期不等于0,表示內(nèi)存不足。
如果disk 經(jīng)常不等于0, 且在 b中的隊(duì)列 大于3, 表示 io性能不好。
2、觀察cpu活動情況
vmstat比top更能反映出cpu的使用情況:
us:用戶程序使用cpu的時間比例。這個數(shù)字越大,表示用戶進(jìn)程越繁忙。
sy:系統(tǒng)調(diào)用使用cpu的時間比例。注意,NFS由于是在內(nèi)核里面運(yùn)行的,所以NFS活動所占用的cpu時間反映在sy里面。這個數(shù)字經(jīng)常很大的話,就需要注意是否某個內(nèi)核進(jìn)程,比如NFS任務(wù)比較繁重。如果us和sy同時都比較大的話,就需要考慮將某些用戶程序分離到另外的服務(wù)器上面,以免互相影響。
id:cpu空閑的時間比例。
wa:cpu等待未決的磁盤IO的時間比例。
用iostat監(jiān)視I/O子系統(tǒng)情況
iostat是I/O statistics(輸入/輸出統(tǒng)計)的縮寫,iostat工具將對系統(tǒng)的磁盤操作活動進(jìn)行監(jiān)視。它的特點(diǎn)是匯報磁盤活動統(tǒng)計情況,同時也會匯報出CPU使用情況。同vmstat一樣,iostat也有一個弱點(diǎn),就是它不能對某個進(jìn)程進(jìn)行深入分析,僅對系統(tǒng)的整體情況進(jìn)行分析。
iostat的語法如下:
CODE:
iostat [ -c | -d ] [ -k ] [ -t ] [ -V ] [ -x [ device ] ] [ interval [ count ] ]
[Copy to clipboard]
其中,-c為匯報CPU的使用情況;-d為匯報磁盤的使用情況;-k表示每秒按kilobytes字節(jié)顯示數(shù)據(jù);-t為打印匯報的時間;-v表示打印出版本信息和用法;-x device指定要統(tǒng)計的設(shè)備名稱,默認(rèn)為所有的設(shè)備;interval指每次統(tǒng)計間隔的時間;count指按照這個時間間隔統(tǒng)計的次數(shù)。
iostat一般的輸出格式如下:
CODE:
Linux 2.4.18-18smp (builder.linux.com) 2003年03月07日
avg-cpu: %user %nice %sys %idle
4.81 0.01 1.03 94.15
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
dev3-0 30.31 1117.68 846.52 16104536 12197374
dev3-1 7.06 229.61 40.40 3308486 582080
[Copy to clipboard]
device顯示設(shè)備名
r/s顯示每秒讀磁盤操作的次數(shù)
w/s 顯示每秒寫磁盤操作的次數(shù)
kr/s 顯示每秒讀數(shù)據(jù)總量 單位K
kw/s 顯示每秒寫數(shù)據(jù)總量 單位K
wait 顯示平均的等待事務(wù)數(shù)量
actv 顯示正在處理的平均事務(wù)總量
svc_t 顯示憑據(jù)服務(wù)周期 單位 ms
%w 顯示等待時間的百分?jǐn)?shù)
%b 顯示磁盤工作時間的百分?jǐn)?shù)
對于輸出中各字段的含義,iostat的幫助中有詳細(xì)的說明。
使用sar進(jìn)行綜合分析
引用:
表1 sar參數(shù)說明
選項(xiàng) 功能
-A 匯總所有的報告
-a 報告文件讀寫使用情況
-B 報告附加的緩存的使用情況
-b 報告緩存的使用情況
-c 報告系統(tǒng)調(diào)用的使用情況
-d 報告磁盤的使用情況
-g 報告串口的使用情況
-h 報告關(guān)于buffer使用的統(tǒng)計數(shù)據(jù)
-m 報告IPC消息隊(duì)列和信號量的使用情況
-n 報告命名cache的使用情況
-p 報告調(diào)頁活動的使用情況
-q 報告運(yùn)行隊(duì)列和交換隊(duì)列的平均長度
-R 報告進(jìn)程的活動情況
-r 報告沒有使用的內(nèi)存頁面和硬盤塊
-u 報告CPU的利用率
-v 報告進(jìn)程、i節(jié)點(diǎn)、文件和鎖表狀態(tài)
-w 報告系統(tǒng)交換活動狀況
-y 報告TTY設(shè)備活動狀況
sar是System Activity Reporter(系統(tǒng)活動情況報告)的縮寫。顧名思義,sar工具將對系統(tǒng)當(dāng)前的狀態(tài)進(jìn)行取樣,然后通過計算數(shù)據(jù)和比例來表達(dá)系統(tǒng)的當(dāng)前運(yùn)行狀態(tài)。它的特點(diǎn)是可以連續(xù)對系統(tǒng)取樣,獲得大量的取樣數(shù)據(jù);取樣數(shù)據(jù)和分析的結(jié)果都可以存入文件,所需的負(fù)載很小。sar是目前Linux上最為全面的系統(tǒng)性能分析工具之一,可以從14個大方面對系統(tǒng)的活動進(jìn)行報告,包括文件的讀寫情況、系統(tǒng)調(diào)用的使用情況、串口、CPU效率、內(nèi)存使用狀況、進(jìn)程活動及IPC有關(guān)的活動等,使用也是較為復(fù)雜。
sar的語法如下:
CODE:
sar [-option] [-o file] t [n]
[Copy to clipboard]
它的含義是每隔t秒取樣一次,共取樣n次。其中-o file表示取樣結(jié)果將以二進(jìn)制形式存入文件file中。
另一種語法如下:
CODE:
sar [-option] [-s time] [-e time] [-i sec] [-f file]
[Copy to clipboard]
含義是表示從file文件中取出數(shù)據(jù),如果沒有指定-f file,則從標(biāo)準(zhǔn)數(shù)據(jù)文件/var/adm/sa/sadd取數(shù)據(jù),其中dd表示當(dāng)前天。另外,-s time表示起始時間;-e time表示停止時間;-i sec表示取樣的時間間隔,如果不指定則表示取文件中所有的數(shù)據(jù)。對于具體的選項(xiàng)參見表1。
一般它與-q和-u聯(lián)合使用,以便對每個CPU的使用情況進(jìn)行分析,比如運(yùn)行如下命令:
CODE:
sar -q -u 5 1
[Copy to clipboard]
將輸出如下:
CODE:
Linux 2.4.18-18smp (builder.linux.com) 2003年03月07日
09時46分16? CPU %user %nice %system %idle
09時46分21? all 0.20 0.00 0.00 99.80
09時46分16? runq-sz plist-sz ldavg-1 ldavg-5
09時46分21? 0 91 0.00 0.00
Average: CPU %user %nice %system %idle
Average: all 0.20 0.00 0.00 99.80
Average: runq-sz plist-sz ldavg-1 ldavg-5
Average: 0 91 0.00 0.00
[Copy to clipboard]
由于sar命令太復(fù)雜,只有通過熟練使用才能了解每個選項(xiàng)的含義,對于sar輸出中每個字段的含義運(yùn)行man sar命令可以得到詳細(xì)的解釋。