Sar 在性能測試中的作用

今天爲大家介紹一個好朋友,名字叫sar,它的腦子裏全是機器系統性能的信息,你只要和它搞好關係,以後想獲得任何這方面的信息,可就不愁了!

 

1 sar是做什麼的?

 

主要負責收集、彙報與存儲系統運行信息的。

 

2 sar怎麼控制信息輸出的時間間隔和次數?

 

有兩個參數非常非常常用,就是“時間間隔”和“輸出次數”。

 

時間間隔表示兩次信息輸出之間的時間間隔,單位是秒。如果這個值被設置爲0,則表示所輸出的信息是從開機到現在爲止的信息平均值。如果不是0sar計算就都是從當前開始的信息的平均值。

 

輸出次數表示輸出系統信息的次數,默認是1次。如果這個值被設置爲0,則會永遠的輸出下去。

 

比如:sar 60 5 表示每60秒輸出一次,共輸出5次。(如果你腦子夠快的話,會發現這個命令將歷時300秒,因爲每一次信息輸出前會先停頓60秒的。)

 

3 怎麼把sar輸出的這些有用信息存到文件中去呢?

 

sar專門提供了一個選項-o filename,你只要使用它,就可以嘍!

 

比如 sar 5 6 -o sys_info

 

不過,不幸的是,當你用catsys_info時發現全都是亂碼,呵呵,彆着急,sar爲你準備了-f filename選項,你只要用-f設定要讀取的信息存儲文件,就可以清晰地讀出信息了。

 

比如sar -f sys_info

 

如果你覺得這種格式有些不利於處理,試試加上-h選項,你將獲得不一樣的體驗。:D

 

4 如果我使用-o時,竟然忘了輸入文件名,sar會抱怨麼?

 

如果你只寫了-o,沒寫具體文件名,那麼sar會自動把輸出信息更記錄在/var/log/saDD文件裏,其中DD表示當天的日期數字。

 

比如sar 2 2 -o

 

那麼輸出信息會記錄在/var/log/sa/sa17文件裏,因爲今天是20091017日。

 

5 如果我的CPU是多核處理器,那麼sar能知道某一個核的運行信息麼?

 

完全沒問題的。有一個選項-P,就是用來爲多核處理器而設計的。

 

當在使用sar命令而沒有設定-P選項時,sar會根據所有核給出一個宏觀彙報,也就是平均的值。

 

如果使用了-P選項來指定某一個核,那麼就會針對這個單獨的核給出具體性能信息。

 

當使用-P ALL時,sar就會根據每一個核都給出其具體性能信息,然後再給出一個總的性能信息。

 

比如,我這裏有一個至強處理器的CPU,是八核CPU,看看-P的使用方法吧:

 

$ sar -P ALL 1 1

Linux 2.6.9    10/16/2009

 

10:59:38 PM       CPU     %user     %nice   %system   %iowait     %idle

10:59:39 PM       all      2.12      0.00      2.87      0.00     95.01

10:59:39 PM         0      0.00      0.00      1.98      0.00     98.02

10:59:39 PM         1      9.00      0.00      7.00      0.00     84.00

10:59:39 PM         2      0.00      0.00      1.98      0.00     98.02

10:59:39 PM         3      7.00      0.00      1.00      0.00     92.00

10:59:39 PM         4      0.00      0.00      3.03      0.00     96.97

10:59:39 PM         5      0.00      0.00      1.00      0.00     99.00

10:59:39 PM         6      0.00      0.00      3.96      0.00     96.04

10:59:39 PM         7      0.99      0.00      1.98      0.00     97.03

 

Average:          CPU     %user     %nice   %system   %iowait     %idle

Average:          all      2.12      0.00      2.87      0.00     95.01

Average:            0      0.00      0.00      1.98      0.00     98.02

Average:            1      9.00      0.00      7.00      0.00     84.00

Average:            2      0.00      0.00      1.98      0.00     98.02

Average:            3      7.00      0.00      1.00      0.00     92.00

Average:            4      0.00      0.00      3.03      0.00     96.97

Average:            5      0.00      0.00      1.00      0.00     99.00

Average:            6      0.00      0.00      3.96      0.00     96.04

Average:            7      0.99      0.00      1.98      0.00     97.03

看,sar會根據處理器的每一個核給出性能信息。當我們想查看第6個核的信息時,其輸出如下:

 

$ sar -P 5 1 1

Linux 2.6.9      10/16/2009

 

11:01:16 PM       CPU     %user     %nice   %system   %iowait     %idle

11:01:17 PM         5      0.00      0.00      2.00      0.00     98.00

 

Average:          CPU     %user     %nice   %system   %iowait     %idle

Average:            5      0.00      0.00      2.00      0.00     98.00

6 好像sar只會輸出CPU信息,如何查看內存信息、網絡信息或者IO信息呢?

 

是這樣的,sar命令在默認情況下是輸出CPU信息的,只有當用戶專門使用選項來設定要查看網絡信息時,sar纔會輸出網絡的當前信息,內存信息和IO信息也是同樣道理。

 

常用的選項包括:

 

-b:報告I/O使用情況以及傳輸速率。(只適用於2.5及之前的內核,所以新內核有可能不支持這個選項)

 

-B:報告“頁”使用情況

 

-c:報告進程創建情況

 

-d:報告每一個塊設備的使用情況

(當你使用時,你會發現在DEV列有類似dev1-7格式的字符串,

其中1代表設備的主序號,n代表設備的從序號,

而且rd_sec/s列和wr_sec/s列的單位都是512bytes,也就是512B,也就是0.5KB

 

-I:彙報中斷情況

 

-n:彙報網絡情況

 

-P:設定CPU

 

-q:彙報隊列長度和負載信息

 

-r:彙報內存和交換區使用情況

 

-R:彙報內存情況

 

-u:彙報CPU使用情況

 

-v:彙報i節點、文件和其他內核表信息

 

-w:彙報系統上下文切換情況

 

-x:可以針對某個特定PID給出統計信息,

可以直接指定進程ID號;

也可以指定爲SELF,這樣就是檢測sar進程本身;

如果設定爲ALL,則表示彙報所有系統進程信息。

 

-X:彙報特定PID的子進程的信息

 

-y:設定TTY設備的信息。

7 這麼一堆指代某項性能的選項,我懶得使用,我想一下輸出最全最全的信息!

 

sar提供了一個無敵選項,即-A,它代表all,而且還是大寫的,可見其威力無敵:D

 

這個-A就相當於-bBcdqrRuvwWy -I SUM -n FULL -P ALL這麼一堆選項了,擦亮眼睛看看每一個選項,熟不熟~~

 

不過,話說回來,-A輕易不要用,否則一大坨信息輸出到屏幕上,刷屏就要刷N年,你不暈菜纔怪。

 

8 我想利用sar來做個後臺監控程序,可以實時彙報機器性能情況。sar能放後臺運行麼?

 

當然可以,只要藉助linux的後臺符就可以了,別忘了把標準輸出重定向哦,方法是這樣的:

 

sar -o monitor.res interval count >/dev/null 2>&1 &

記得把intervalcount都替換爲你想要的間隔和次數。這樣所有的性能信息就全都存入二進制格式的數據文件monitor.res裏了。當讀取時使用-f就可以了。

 

9 我不想使用“間隔和次數”的方法來指定彙報時間,我想讓sar在某個特定時間結束,有方法沒?

 

可以實現,使用-e hh:mm:ss選項就可以了,設定好你的結束時間,sar就會乖乖的在這個時間結束嘍。

 

默認的結束時間是18:00:00,也就是說如果你使用-e但沒有指定具體時間,sar就會用在晚上6點結束。

 

需要注意的一點是,-e選項只能用在讀取(-f)或寫入(-o)信息文件時纔可用哦。

 

10 我覺得-o存儲的文件的內容不利於我提取有效信息,怎麼辦呢?

 

sar想到了這一點,它提供了一個-h選項,就是用於當你使用-f選項讀取文件時,以一種特殊格式輸出,這種格式很利於awk等文本處理工具來提取相應信息,你可以試試看:)

 

11 選項很多,字段很多,背景知識也很多,搞得我快昏了,能不能給一些簡潔明瞭的例子呢?

 

這麼多信息想立刻掌握,並非易事,結合例子,或許效果更好些,例子如下:

 

sar -u 2 5 :每個兩秒報告一次CPU使用情況,共報告5

 

sar -I 14 -o sys_info 2 10 :彙報IRQ14的信息,每兩秒一次,共10次,所有輸出信息存入sys_info中去。

 

sar -r -n DEV -f sys_net :顯示內存使用情況、交換區使用情況以及網絡情況,所有輸出信息存入sys_net文件中。

 

12 我對網絡監控這塊比較感興趣,能詳細說說麼?

 

sar命令使用-n選項可以彙報網絡相關信息,可用的參數包括:DEVEDEVSOCKFULL

 

如果你使用DEV關鍵字,那麼sar將彙報和網絡設備相關的信息,如loeth0eth1等,例如:

 

$ sar -n DEV 1 2

Linux 2.6.9      10/17/2009

 

12:10:49 AM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s

12:10:50 AM      eth0     63.64      0.00   4072.73      0.00      0.00      0.00      0.00

12:10:50 AM      eth1     30.30     13.13   2907.07   1234.34      0.00      0.00      0.00

12:10:50 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00

IFACE:就是網絡設備的名稱;

 

rxpck/s:每秒鐘接收到的包數目

 

txpck/s:每秒鐘發送出去的包數目

 

rxbyt/s:每秒鐘接收到的字節數

 

txbyt/s:每秒鐘發送出去的字節數

 

rxcmp/s:每秒鐘接收到的壓縮包數目

 

txcmp/s:每秒鐘發送出去的壓縮包數目

 

txmcst/s:每秒鐘接收到的多播包的包數目

 

如果你使用EDEV關鍵字,那麼會針對網絡設備彙報其失敗情況,例如:

 

$ sar -n EDEV 1 3

Linux 2.6.9     10/17/2009

 

12:15:06 AM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s

12:15:07 AM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

12:15:07 AM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

12:15:07 AM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

rxerr/s:每秒鐘接收到的損壞的包的數目

 

txerr/s:當發送包時,每秒鐘發生的錯誤數

 

coll/s:當發送包時,每秒鐘發生的衝撞(collisions)數(這個是在半雙工模式下才有)

 

rxdrop/s:由於緩衝區滿,網絡設備接收端,每秒鐘丟掉的網絡包的數目

 

txdrop/s:由於緩衝區滿,網絡設備發送端,每秒鐘丟掉的網絡包的數目

 

txcarr/s:當發送數據包時,每秒鐘載波錯誤發生的次數

 

rxfram/s:在接收數據包時,每秒鐘發生的幀對齊錯誤的次數

 

rxfifo/s:在接收數據包時,每秒鐘緩衝區溢出錯誤發生的次數

 

txfifo/s:在發送數據包時,每秒鐘緩衝區溢出錯誤發生的次數

 

如果你使用SOCK關鍵字,則會針對socket連接進行彙報,例如:

 

$ sar -n SOCK 1 3

Linux 2.6.9       10/17/2009

 

12:27:29 AM    totsck    tcpsck    udpsck    rawsck   ip-frag

12:27:30 AM        90        41         4         0         0

12:27:31 AM        90        41         4         0         0

12:27:32 AM        90        41         4         0         0

Average:           90        41         4         0         0

totsck:被使用的socket的總數目

 

tcpsck:當前正在被使用於TCPsocket數目

 

udpsck:當前正在被使用於UDPsocket數目

 

rawsck:當前正在被使用於RAWsocket數目

 

ip-frag:當前的IP分片的數目

 

如果你使用FULL關鍵字,相當於上述DEVEDEVSOCK三者的綜合。

 

 

主要注意%wio%idle

 

%wio的值過高,表示硬盤存在I/O瓶頸,

 

%idle值高,表示CPU較空閒,如果%idle值高但系統響應慢時,有可能是CPU等待分配內存,此時應加大內存容量。%idle值如果持續低於10,那麼系統的CPU處理能力相對較低,表明系統中最需要解決的資源是CPU
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章