我決定把今年裝x的機會,留給sar命令。它是一個Linux下的監控工具,一直站在鄙視鏈的頂端。之所以讓人望而生畏,主要是由於它繁多的引數。但,這麼強大的命令,並非無章可循,實際上是非常簡單的。
今天就和xjjdog一起,尋覓sar命令的隱秘之處,共同沾得帝王之氣,以便傲視群cmd,彰顯自己側漏的霸氣!
sar命令很簡單,它的引數主要分為四部分。其中,第二部分和第三、四部分,是可選的,也就是說,最終要的引數,就剩下一個,那就是型別。這個引數的值非常的多,我們暫且放在一邊,看一下以上命令的簡單意義。
型別,也就是我們要獲取的是哪個型別的指標資料,這裡的-n,代表的是監控一些網路資訊型別引數,有的型別帶有引數,有的沒有。這裡的DEV,代表的是監控網絡卡資訊時間間隔,表示多少秒取樣一次資料,這裡的1就是1秒次數,表示取樣的次數。比如時間間隔是3,取樣次數是4,那麼sar命令將會阻塞12秒鐘我們來看小小偷窺一下它的輸出。
# sar -n DEV 1 203:10:29 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil03:10:30 PM lo 30.00 30.00 2.09 2.09 0.00 0.00 0.00 0.0003:10:30 PM eth0 6.00 2.00 0.38 0.32 0.00 0.00 0.00 0.0003:10:30 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil03:10:31 PM lo 39.00 39.00 2.95 2.95 0.00 0.00 0.00 0.0003:10:31 PM eth0 11.00 12.00 0.72 5.26 0.00 0.00 0.00 0.00Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutilAverage: lo 33.00 33.00 2.38 2.38 0.00 0.00 0.00 0.00Average: eth0 9.33 8.33 0.60 2.39 0.00 0.00 0.00 0.00
非常非常規整的二維陣列,不像top命令那種張狂的顯示(top -b -n 1可以輸出當前資訊)。可以很方便的使用sed,awk這樣的工具進行處理。
瞭解這命令構成的各個部分,我們就可以放心大膽的來看具體的引數,都有哪些了。能不能抓到這隻猹,在此一舉。
之所以說sar命令,站在鄙視鏈的頂端,那是因為它的引數是非常豐富的。我們再也不需要各種iostat、top、vmstat等五花八門的命令,只需要一個sar,就能統一天下。
Linux下的資源監控,不外乎下面幾種。有磁碟、CPU、網路、記憶體、IO等。不好意思,sar都能監控到,就是這麼目空一切。
接下來,我們就來漫遊一小把。
1. CPU資訊我們就先從cpu資訊開始說起。作為計算機的大腦,作為一個指揮者,我們要監控它的一舉一動。實際上,對於CPU有下面三種監控。
(1)利用率,使用sar -u,我們看下它的執行結果。可以看到每種型別的使用情況,和top命令種的意義,是一樣的。
# sar -u 1 103:37:39 PM CPU %user %nice %system %iowait %steal %idle03:37:40 PM all 0.25 0.50 0.50 0.00 0.00 98.75Average: all 0.25 0.50 0.50 0.00 0.00 98.75複製程式碼
(2)負載,使用sar -q,同樣的,和top的引數意義是相似的。除了load值,它還顯示了等待佇列的長度,對於排查排隊問題非常有幫助。
# sar -q 1 103:40:15 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked03:40:16 PM 0 468 0.02 0.04 0.00 0Average: 0 468 0.02 0.04 0.00 0複製程式碼
(3)中斷,使用sar -I,注意i是大寫的。由於有不同的換算方式,所以中斷的引數,分為預設、SUM、ALL等。
# sar -I SUM 1 203:44:36 PM INTR intr/s03:44:37 PM sum 1118.0003:44:38 PM sum 1024.00Average: sum 1071.00
(4)上下文切換,使用sar -w,它經常與監控swap交換分割槽的使用情況的sar -W搞混,所以要注意。
# sar -w 104:08:33 PM proc/s cswch/s04:08:34 PM 0.00 1686.00
2. 記憶體資訊
看完了CPU就再看記憶體。CPU跑滿了機器可能表現就是慢點,記憶體跑滿了可是要死人的。
記憶體主要是分為下面這些部分,我們平常監控的,主要是物理記憶體、虛擬記憶體、核心等。
(1)記憶體利用率,使用sar -r命令。有些sar版本可能會有sar -R,但一般小寫的就夠了。
# sar -r 1 103:48:39 PM kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty03:48:40 PM 1663884 2650804 6057692 78.45 0 1001040 6954428 90.06 4915476 582184 100Average: 1663884 2650804 6057692 78.45 0 1001040 6954428 90.06 4915476 582184 100複製程式碼
(2)swap交換分割槽。對於swap分割槽來說,就可以使用sar -S。效果如下。如果想要看交換分割槽的使用情況(非容量情況),就要切換到sar -W命令。
# sar -S 1 104:05:22 PM kbswpfree kbswpused %swpused kbswpcad %swpcad04:05:23 PM 0 0 0.00 0 0.00Average: 0 0 0.00 0 0.00複製程式碼
(3)核心使用情況,主要是使用sar -v命令。v一般在別的命令中用作版本展示,sar命令用來輸出slab區的一些資訊,可以說是特立獨行,不走尋常路。
# sar -v 104:10:17 PM dentunusd file-nr inode-nr pty-nr04:10:18 PM 115135 3776 111146 304:10:19 PM 115145 3776 111151 304:10:20 PM 115149 3776 111155 3複製程式碼
(4)sar還能監控到記憶體分頁資訊,它有一個牛x的名字sar -B,來看看它的效果。
# sar -B04:15:39 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff04:15:40 PM 20.00 10.00 0.00 0.00 1.00 0.00 0.00 0.00 0.0004:15:41 PM 16.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.0004:15:42 PM 20.00 186.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
3. I/O資訊IO資訊監控,同樣是一個響亮的sar -b,不過這裡的b,變成了小寫的。
# sar -b 1 204:17:25 PM tps rtps wtps bread/s bwrtn/s04:17:26 PM 6.00 4.00 2.00 32.00 23.0004:17:27 PM 5.00 5.00 0.00 48.00 0.00Average: 5.50 4.50 1.00 40.00 11.50
如果你要找問題,就要配合著iowait去找了。
你可能會說,這裡面的輸出,才有5個選項,完全沒有iostat輸出的多!有個鳥用?這是因為你還沒用到sar -d,我們來看他的效果。呵呵,就是個iostat的翻版啊。
# sar -d 104:18:47 PM DEV tps rkB/s wkB/s areq-sz aqu-sz await svctm %util04:18:48 PM dev253-0 4.00 16.00 0.00 4.00 0.00 0.50 1.75 0.7004:18:49 PM dev253-0 5.00 84.00 0.00 16.80 0.00 0.60 1.80 0.90複製程式碼
4. 網路資訊接下來,我們看最複雜的網路資訊。說它複雜,是因為它的引數非常的多,比如上面說到的DEV,就表示的網路流量。
DEV 網絡卡EDEV 網絡卡 (錯誤)NFS NFS 客戶端NFSD NFS 伺服器SOCK Sockets (套接字) (v4)IP IP 流 (v4)EIP IP 流 (v4) (錯誤)ICMP ICMP 流 (v4)EICMP ICMP 流 (v4) (錯誤)TCP TCP 流 (v4)ETCP TCP 流 (v4) (錯誤)UDP UDP 流 (v4)SOCK6 Sockets (套接字) (v6)IP6 IP 流 (v6)EIP6 IP 流 (v6) (錯誤)ICMP6 ICMP 流 (v6)EICMP6 ICMP 流 (v6) (錯誤)UDP6 UDP 流 (v6)要命的是,這些引數的每個輸出,還都不是一樣的。可能是26個字母已經無法涵蓋這麼多引數了吧,所以sar命令統一把它加在了sar -n下面。好在我們平常使用的時候,只和DEV引數打交道既可以了。
5. 如何安裝我們介紹過各種linux命令,像什麼top、vmstat、mpstat、iostat...等等等等。
最常用的一套“Vim“技巧最常用的一套“Sed“技巧最常用的一套“AWK“技巧
經過我們上面的介紹。發現,這些都不行。要說能力強,還得看sar命令。
sar(System ActivityReporter)是Linux最為全面的系統性能分析工具,可以監控CPU、記憶體、網路、I/O、檔案讀寫、系統呼叫等各種資源,算是一個萬能的小能手。
sar命令同樣是sysstat工具包裡的命令,如果你無法執行,需要像下面這樣安裝。
yum install sysstat
sar對比top這樣的命令,有一個非常大的優勢,那就是可以顯示歷史指標。
所以你剛開始安裝以後,嘗試執行sar。結果報錯了。
[root@localhost ~]# sarCannot open /var/log/sa/sa08: No such file or directory複製程式碼
這就需要等一小會兒再執行,因為現在它還沒有資料。一切面包牛奶,都會有的。
Endsar命令是可以看到歷史記錄的。那這些檔案存在哪呢?我們可以在/var/log/sa目錄下找到它們。但可惜的是,vim開啟這些檔案,是亂碼!
可以使用下面的命令匯出它們。後面的數字,一般是當天的日期。
sar -A -f /var/log/sa/sa21 > monitor
這個monitor檔案,我們可以使用圖形化的工具開啟,也可以使用文字編輯器開啟。這裡以kSar為例(一個java便攜的GUI),選擇載入monitor檔案,即可出現下面的效果。
有了sar這個強大的命令,你就可以對系統的引數瞭如指掌。和sar命令比起來,其他的命令可真的是渣。第一是因為sar能看到歷史,第二是因為sar功能強大。但那些命令即使是渣,我也用的很歡。原因也有兩個,一個就是用習慣了,不想換;另外一個,就是那麼牛x的sar命令,引數實在是有點反人類,真的不好記憶。