linux sar命令詳解
sar(System Activity Reporter系統活動情況報告)是目前 Linux 上最爲全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告,包括:文件的讀寫情況、系統調用的使用情況、磁盤I/O、CPU效率、內存使用狀況、進程活動及IPC有關的活動等。本文主要以CentOS 6.3 x64系統爲例,介紹sar命令。
root@ranger-PC:~# sudo apt install searchandrescue
sar命令常用格式
sar [options] [-A] [-o file] t [n]
其中:
t爲採樣間隔,n爲採樣次數,默認值是1;
-o file表示將命令結果以二進制格式存放在文件中,file 是文件名。
options 爲命令行選項,sar命令常用選項如下:
-A:所有報告的總和
-u:輸出CPU使用情況的統計信息
-v:輸出inode、文件和其他內核表的統計信息
-d:輸出每一個塊設備的活動信息
-r:輸出內存和交換空間的統計信息
-b:顯示I/O和傳送速率的統計信息
-a:文件讀寫情況
-c:輸出進程統計信息,每秒創建的進程數
-R:輸出內存頁面的統計信息
-y:終端設備活動情況
-w:輸出系統交換活動信息
1. CPU資源監控
例如,每10秒採樣一次,連續採樣3次,觀察CPU 的使用情況,並將採樣結果以二進制形式存入當前目錄下的文件test中,需鍵入如下命令:
sar -u -o test 10 3
屏幕顯示如下:
17:06:16 CPU %user %nice %system %iowait %steal %idle
17:06:26 all 0.00 0.00 0.20 0.00 0.00 99.80
17:06:36 all 0.00 0.00 0.20 0.00 0.00 99.80
17:06:46 all 0.00 0.00 0.10 0.00 0.00 99.90
Average: all 0.00 0.00 0.17 0.00 0.00 99.83
輸出項說明:
CPU:all 表示統計信息爲所有 CPU 的平均值。
%user:顯示在用戶級別(application)運行使用 CPU 總時間的百分比。
%nice:顯示在用戶級別,用於nice操作,所佔用 CPU 總時間的百分比。
%system:在覈心級別(kernel)運行所使用 CPU 總時間的百分比。
%iowait:顯示用於等待I/O操作佔用 CPU 總時間的百分比。
%steal:管理程序(hypervisor)爲另一個虛擬進程提供服務而等待虛擬 CPU 的百分比。
%idle:顯示 CPU 空閒時間佔用 CPU 總時間的百分比。
1. 若 %iowait 的值過高,表示硬盤存在I/O瓶頸
2. 若 %idle 的值高但系統響應慢時,有可能是 CPU 等待分配內存,此時應加大內存容量
3. 若 %idle 的值持續低於1,則系統的 CPU 處理能力相對較低,表明系統中最需要解決的資源是 CPU 。
如果要查看二進制文件test中的內容,需鍵入如下sar命令:
sar -u -f test
2. inode、文件和其他內核表監控
例如,每10秒採樣一次,連續採樣3次,觀察覈心表的狀態,需鍵入如下命令:
sar -v 10 3
屏幕顯示如下:
17:10:49 dentunusd file-nr inode-nr pty-nr
17:10:59 6301 5664 12037 4
17:11:09 6301 5664 12037 4
17:11:19 6301 5664 12037 4
Average: 6301 5664 12037 4
輸出項說明:
dentunusd:目錄高速緩存中未被使用的條目數量
file-nr:文件句柄(file handle)的使用數量
inode-nr:索引節點句柄(inode handle)的使用數量
pty-nr:使用的pty數量
3. 內存和交換空間監控
例如,每10秒採樣一次,連續採樣3次,監控內存分頁:
sar -r 10 3
屏幕顯示如下:
輸出項說明:
kbmemfree:這個值和free命令中的free值基本一致,所以它不包括buffer和cache的空間.
kbmemused:這個值和free命令中的used值基本一致,所以它包括buffer和cache的空間.
%memused:這個值是kbmemused和內存總量(不包括swap)的一個百分比.
kbbuffers和kbcached:這兩個值就是free命令中的buffer和cache.
kbcommit:保證當前系統所需要的內存,即爲了確保不溢出而需要的內存(RAM+swap).
%commit:這個值是kbcommit與內存總量(包括swap)的一個百分比.
4. 內存分頁監控
例如,每10秒採樣一次,連續採樣3次,監控內存分頁:
sar -B 10 3
屏幕顯示如下:
輸出項說明:
pgpgin/s:表示每秒從磁盤或SWAP置換到內存的字節數(KB)
pgpgout/s:表示每秒從內存置換到磁盤或SWAP的字節數(KB)
fault/s:每秒鐘系統產生的缺頁數,即主缺頁與次缺頁之和(major + minor)
majflt/s:每秒鐘產生的主缺頁數.
pgfree/s:每秒被放入空閒隊列中的頁個數
pgscank/s:每秒被kswapd掃描的頁個數
pgscand/s:每秒直接被掃描的頁個數
pgsteal/s:每秒鐘從cache中被清除來滿足內存需要的頁個數
%vmeff:每秒清除的頁(pgsteal)佔總掃描頁(pgscank+pgscand)的百分比
5. I/O和傳送速率監控
例如,每10秒採樣一次,連續採樣3次,報告緩衝區的使用情況,需鍵入如下命令:
sar -b 10 3
屏幕顯示如下:
18:51:05 tps rtps wtps bread/s bwrtn/s
18:51:15 0.00 0.00 0.00 0.00 0.00
18:51:25 1.92 0.00 1.92 0.00 22.65
18:51:35 0.00 0.00 0.00 0.00 0.00
Average: 0.64 0.00 0.64 0.00 7.59
輸出項說明:
tps:每秒鐘物理設備的 I/O 傳輸總量
rtps:每秒鐘從物理設備讀入的數據總量
wtps:每秒鐘向物理設備寫入的數據總量
bread/s:每秒鐘從物理設備讀入的數據量,單位爲 塊/s
bwrtn/s:每秒鐘向物理設備寫入的數據量,單位爲 塊/s
6. 進程隊列長度和平均負載狀態監控
例如,每10秒採樣一次,連續採樣3次,監控進程隊列長度和平均負載狀態:
sar -q 10 3
屏幕顯示如下:
19:25:50 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
19:26:00 0 259 0.00 0.00 0.00
19:26:10 0 259 0.00 0.00 0.00
19:26:20 0 259 0.00 0.00 0.00
Average: 0 259 0.00 0.00 0.00
輸出項說明:
runq-sz:運行隊列的長度(等待運行的進程數)
plist-sz:進程列表中進程(processes)和線程(threads)的數量
ldavg-1:最後1分鐘的系統平均負載(System load average)
ldavg-5:過去5分鐘的系統平均負載
ldavg-15:過去15分鐘的系統平均負載
7. 系統交換活動信息監控
例如,每10秒採樣一次,連續採樣3次,監控系統交換活動信息:
sar - W 10 3
屏幕顯示如下:
19:39:50 pswpin/s pswpout/s
19:40:00 0.00 0.00
19:40:10 0.00 0.00
19:40:20 0.00 0.00
Average: 0.00 0.00
輸出項說明:
pswpin/s:每秒系統換入的交換頁面(swap page)數量
pswpout/s:每秒系統換出的交換頁面(swap page)數量
8. 設備使用情況監控
例如,每10秒採樣一次,連續採樣3次,報告設備使用情況,需鍵入如下命令:
# sar -d 10 3 –p
屏幕顯示如下:
17:45:54 DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
17:46:04 scd0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
17:46:04 sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
17:46:04 vg_livedvd-lv_root 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
17:46:04 vg_livedvd-lv_swap 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
其中:
參數-p可以打印出sda,hdc等磁盤設備名稱,如果不用參數-p,設備節點則有可能是dev8-0,dev22-0
tps:每秒從物理磁盤I/O的次數.多個邏輯請求會被合併爲一個I/O磁盤請求,一次傳輸的大小是不確定的.
rd_sec/s:每秒讀扇區的次數.
wr_sec/s:每秒寫扇區的次數.
avgrq-sz:平均每次設備I/O操作的數據大小(扇區).
avgqu-sz:磁盤請求隊列的平均長度.
await:從請求磁盤操作到系統完成處理,每次請求的平均消耗時間,包括請求隊列等待時間,單位是毫秒(1秒=1000毫秒).
svctm:系統處理每次請求的平均時間,不包括在請求隊列中消耗的時間.
%util:I/O請求佔CPU的百分比,比率越大,說明越飽和.
1. avgqu-sz 的值較低時,設備的利用率較高。
2. 當%util的值接近 1% 時,表示設備帶寬已經佔滿。
要判斷系統瓶頸問題,有時需幾個 sar 命令選項結合起來
懷疑CPU存在瓶頸,可用 sar -u 和 sar -q 等來查看
懷疑內存存在瓶頸,可用 sar -B、sar -r 和 sar -W 等來查看
懷疑I/O存在瓶頸,可用 sar -b、sar -u 和 sar -d 等來查看
和sar比起來,其他Linux命令都是猹
和sar比起來,其他Linux命令都是猹
原創:小姐姐味道(微信公衆號ID:xjjdog),歡迎分享,轉載請保留出處。
我決定把今年裝x的機會,留給sar
命令。它是一個Linux下的監控工具,一直站在鄙視鏈的頂端。之所以讓人望而生畏,主要是由於它繁多的參數。但,這麼強大的命令,並非無章可循,實際上是非常簡單的。
今天就和xjjdog一起,尋覓sar命令的隱祕之處,共同沾得帝王之氣,以便傲視羣cmd,彰顯自己側漏的霸氣!
sar命令很簡單,它的參數主要分爲四部分。其中,第二部分和第三、四部分,是可選的,也就是說,最終要的參數,就剩下一個,那就是類型。這個參數的值非常的多,我們暫且放在一邊,看一下以上命令的簡單意義。
- 類型,也就是我們要獲取的是哪個類型的指標數據,這裏的
-n
,代表的是監控一些網絡信息 - 類型參數,有的類型帶有參數,有的沒有。這裏的
DEV
,代表的是監控網卡信息 - 時間間隔,表示多少
秒
採樣一次數據,這裏的1
就是1秒 - 次數,表示採樣的次數。比如時間間隔是3,採樣次數是4,那麼sar命令將會阻塞12秒鐘
我們來看小小偷窺一下它的輸出。
# sar -n DEV 1 2
03:10:29 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
03:10:30 PM lo 30.00 30.00 2.09 2.09 0.00 0.00 0.00 0.00
03:10:30 PM eth0 6.00 2.00 0.38 0.32 0.00 0.00 0.00 0.00
03:10:30 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
03:10:31 PM lo 39.00 39.00 2.95 2.95 0.00 0.00 0.00 0.00
03:10:31 PM eth0 11.00 12.00 0.72 5.26 0.00 0.00 0.00 0.00
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
Average: lo 33.00 33.00 2.38 2.38 0.00 0.00 0.00 0.00
Average: 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都能監控到,就是這麼目空一切。 localfile://media/15419901472131/15421816552644.jpg
接下來,我們就來漫遊一小把。
1. CPU信息
我們就先從cpu信息開始說起。作爲計算機的大腦,作爲一個指揮者,我們要監控它的一舉一動。實際上,對於CPU有下面三種監控。
(1)利用率,使用sar -u
,我們看下它的執行結果。可以看到每種類型的使用情況,和top命令種的意義,是一樣的。
# sar -u 1 1
03:37:39 PM CPU %user %nice %system %iowait %steal %idle
03:37:40 PM all 0.25 0.50 0.50 0.00 0.00 98.75
Average: all 0.25 0.50 0.50 0.00 0.00 98.75
(2)負載,使用sar -q
,同樣的,和top的參數意義是相似的。除了load值,它還顯示了等待隊列的長度,對於排查排隊問題非常有幫助。
# sar -q 1 1
03:40:15 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
03:40:16 PM 0 468 0.02 0.04 0.00 0
Average: 0 468 0.02 0.04 0.00 0
(3)中斷,使用sar -I
,注意i是大寫的。由於有不同的換算方式,所以中斷的參數,分爲默認
、SUM
、ALL
等。
# sar -I SUM 1 2
03:44:36 PM INTR intr/s
03:44:37 PM sum 1118.00
03:44:38 PM sum 1024.00
Average: sum 1071.00
(4)上下文切換,使用sar -w
,它經常與監控swap交換分區的使用情況的sar -W
搞混,所以要注意。
# sar -w 1
04:08:33 PM proc/s cswch/s
04:08:34 PM 0.00 1686.00
2. 內存信息
看完了CPU就再看內存。CPU跑滿了機器可能表現就是慢點,內存跑滿了可是要死人的。
內存主要是分爲下面這些部分,我們平常監控的,主要是物理內存
、虛擬內存
、內核
等。
(1)內存利用率,使用sar -r
命令。有些sar版本可能會有sar -R
,但一般小寫的就夠了。
# sar -r 1 1
03:48:39 PM kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
03:48:40 PM 1663884 2650804 6057692 78.45 0 1001040 6954428 90.06 4915476 582184 100
Average: 1663884 2650804 6057692 78.45 0 1001040 6954428 90.06 4915476 582184 100
(2)swap交換分區。對於swap分區來說,就可以使用sar -S
。效果如下。如果想要看交換分區的使用情況(非容量情況),就要切換到sar -W
命令。
# sar -S 1 1
04:05:22 PM kbswpfree kbswpused %swpused kbswpcad %swpcad
04:05:23 PM 0 0 0.00 0 0.00
Average: 0 0 0.00 0 0.00
(3)內核使用情況,主要是使用sar -v
命令。v一般在別的命令中用作版本展示,sar命令用來輸出slab區的一些信息,可以說是特立獨行,不走尋常路。
# sar -v 1
04:10:17 PM dentunusd file-nr inode-nr pty-nr
04:10:18 PM 115135 3776 111146 3
04:10:19 PM 115145 3776 111151 3
04:10:20 PM 115149 3776 111155 3
(4)sar還能監控到內存分頁信息,它有一個牛x的名字sar -B
,來看看它的效果。
# sar -B
04:15:39 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff
04:15:40 PM 20.00 10.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00
04:15:41 PM 16.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
04: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 2
04:17:25 PM tps rtps wtps bread/s bwrtn/s
04:17:26 PM 6.00 4.00 2.00 32.00 23.00
04:17:27 PM 5.00 5.00 0.00 48.00 0.00
Average: 5.50 4.50 1.00 40.00 11.50
如果你要找問題,就要配合着iowait去找了。
你可能會說,這裏面的輸出,纔有5個選項,完全沒有iostat輸出的多!有個鳥用?這是因爲你還沒用到sar -d
,我們來看他的效果。呵呵,就是個iostat的翻版啊。
# sar -d 1
04:18:47 PM DEV tps rkB/s wkB/s areq-sz aqu-sz await svctm %util
04:18:48 PM dev253-0 4.00 16.00 0.00 4.00 0.00 0.50 1.75 0.70
04: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 ~]# sar
Cannot open /var/log/sa/sa08: No such file or directory
這就需要等一小會兒再執行,因爲現在它還沒有數據。一切面包牛奶,都會有的。
End
sar命令是可以看到歷史記錄的。那這些文件存在哪呢?我們可以在/var/log/sa
目錄下找到它們。但可惜的是,vim打開這些文件,是亂碼!
可以使用下面的命令導出它們。後面的數字,一般是當天的日期。
sar -A -f /var/log/sa/sa21 > monitor
這個monitor文件,我們可以使用圖形化的工具打開,也可以使用文本編輯器打開。這裏以kSar
爲例(一個java便攜的GUI),選擇載入monitor文件,即可出現下面的效果。
有了sar這個強大的命令,你就可以對系統的參數瞭如指掌。和sar命令比起來,其他的命令可真的是渣。第一是因爲sar能看到歷史,第二是因爲sar功能強大。但那些命令即使是渣,我也用的很歡。原因也有兩個,一個就是用習慣了,不想換;另外一個,就是那麼牛x的sar命令,參數實在是有點反人類,真的不好記憶。
作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公衆號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高併發世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎添加好友,進一步交流。