《sar訪談》-linux命令五分鐘系列之二十九

[正文開始]

好久沒有寫內容翔實的文章了,最近我和Lee.MaRs都比較忙,公司的項目都很緊啊:)

首先先恭喜一下linux大棚,訂閱人數已經達到了988人。我很期待1000時代的到來!

訂閱人數998

===

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

1 sar是做什麼的?

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

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

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

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

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

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

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

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

比如 sar 5 6 -o sys_info

不過,不幸的是,當你用cat看sys_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文件裏,因爲今天是2009年10月17日。

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 &

記得把interval和count都替換爲你想要的間隔和次數。這樣所有的性能信息就全都存入二進制格式的數據文件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選項可以彙報網絡相關信息,可用的參數包括:DEV、EDEV、SOCK和FULL。

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

$ 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:當前正在被使用於TCP的socket數目

udpsck:當前正在被使用於UDP的socket數目

rawsck:當前正在被使用於RAW的socket數目

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

如果你使用FULL關鍵字,相當於上述DEV、EDEV和SOCK三者的綜合

===

正文就到這裏了,內容不少了,夠大家咀嚼一陣的了:)

或許你平時還在使用free,ifconfig或者top,從今以後,試試sar吧!

專業,從今天開始!哈哈


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章