今天爲大家介紹一個好朋友,名字叫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三者的綜合。
主要注意%wio和%idle,
%wio的值過高,表示硬盤存在I/O瓶頸,
%idle值高,表示CPU較空閒,如果%idle值高但系統響應慢時,有可能是CPU等待分配內存,此時應加大內存容量。%idle值如果持續低於10,那麼系統的CPU處理能力相對較低,表明系統中最需要解決的資源是CPU。