Linux系統性能分析——sar

尋找系統瓶頸的利器——sar

一、sar是什麼?

sar是System Activity Reporter(系統活動情況報告)的縮寫。sar工具將對系統當前的狀態進行取樣,然後通過計算數據和比例來表達系統的當前運行狀態。它的特點是可以連續對系統取樣,獲得大量的取樣數據;取樣數據和分析的結果都可以存入文件,所需的負載很小。sar是目前Linux上最爲全面的系統性能分析工具之一,可以從14個大方面對系統的活動進行報告,包括文件的讀寫情況、系統調用的使用情況、串口、CPU效率、內存使用狀況、進程活動及IPC有關的活動等,使用也是較爲複雜。

二、sar能做什麼?

  • 查看CPU使用率
  • 查看平均負載
  • 查看內存使用狀況
  • 查看I/O設備情況
  • 查看網絡情況
  • 查看頁面交換髮生狀況
  • ……

三、sar怎麼使用?

用法: sar [ 選項 ] [ <時間間隔> [ <次數> ] ]
選項:
[ -A ] [ -b ] [ -B ] [ -C ] [ -d ] [ -h ] [ -m ] [ -p ] [ -q ] [ -r ] [ -R ]
[ -S ] [ -t ] [ -u [ ALL ] ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]
[ -I { <中斷> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -n { <關鍵詞> [,...] | ALL } ]
[ -o [ <文件名> ] | -f [ <文件名> ] ]
[ -i <時間間隔> ] [ -s [ <時:分:秒> ] ] [ -e [ <時:分:秒> ] ]

參數說明
-A 彙總所有的報告
-a 報告文件讀寫使用情況
-B 報告附加的緩存的使用情況
-b 報告緩存的使用情況
-c 報告系統調用的使用情況
-d 報告磁盤的使用情況
-g 報告串口的使用情況
-h 報告關於buffer使用的統計數據
-m 報告IPC消息隊列和信號量的使用情況
-n 報告命名cache的使用情況
-p 報告調頁活動的使用情況
-q 報告運行隊列和交換隊列的平均長度
-R 報告進程的活動情況
-r 報告沒有使用的內存頁面和硬盤塊
-u 報告CPU的利用率
-v 報告進程、i節點、文件和鎖表狀態
-w 報告系統交換活動狀況
-y 報告TTY設備活動狀況

1、查看CPU使用率

使用-u選項,sar輸出整體CPU的使用情況,不加選項時,默認使用的就是-u選項。以下命令顯示採樣時間爲1s,採樣次數爲2次,整體CPU的使用情況。

$ sar 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

15時08分13秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
15時08分14秒     all      1.02      0.00      0.76      0.00      0.00     98.22
15時08分15秒     all      1.01      0.00      1.01      0.00      0.00     97.98
平均時間:       all      1.01      0.00      0.89      0.00      0.00     98.10
$ sar -u  1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

14時36分02秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
14時36分03秒     all      0.76      0.00      0.76      0.00      0.00     98.48
14時36分04秒     all      1.27      0.00      0.76      0.00      0.00     97.97
平均時間:       all      1.01      0.00      0.76      0.00      0.00     98.23

“-P ALL”選項指示對每個內核輸出統計信息,其中”CPU”列輸出0,1,2,3,4指示對應的cpu核。也可針對單獨一個內核顯示,“-P 1”指示顯示第二個內核的統計信息。

$ sar -P ALL  1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

14時35分54秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
14時35分55秒     all      1.01      0.00      0.76      0.00      0.00     98.23
14時35分55秒       0      1.01      0.00      1.01      0.00      0.00     97.98
14時35分55秒       1      1.03      0.00      0.00      0.00      0.00     98.97
14時35分55秒       2      1.01      0.00      1.01      0.00      0.00     97.98
14時35分55秒       3      1.01      0.00      1.01      0.00      0.00     97.98

14時35分55秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
14時35分56秒     all      1.26      0.00      0.76      0.00      0.00     97.98
14時35分56秒       0      1.01      0.00      1.01      0.00      0.00     97.98
14時35分56秒       1      1.01      0.00      2.02      0.00      0.00     96.97
14時35分56秒       2      1.02      0.00      0.00      0.00      0.00     98.98
14時35分56秒       3      1.01      0.00      0.00      0.00      0.00     98.99

平均時間:       CPU     %user     %nice   %system   %iowait    %steal     %idle
平均時間:       all      1.14      0.00      0.76      0.00      0.00     98.10
平均時間:         0      1.01      0.00      1.01      0.00      0.00     97.98
平均時間:         1      1.02      0.00      1.02      0.00      0.00     97.96
平均時間:         2      1.02      0.00      0.51      0.00      0.00     98.48
平均時間:         3      1.01      0.00      0.51      0.00      0.00     98.48
$ sar -P 1  1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

15時12分53秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
15時12分54秒       1      1.02      0.00      1.02      0.00      0.00     97.96
15時12分55秒       1      0.00      0.00      1.01      0.00      0.00     98.99
平均時間:         1      0.51      0.00      1.02      0.00      0.00     98.48
  • %user :用戶模式下CPU時間佔用比例;
  • %nice :通過nice改變了進程調度優先級的進程,在用戶模式下CPU時間佔用比例
  • %system :系統模式下CPU時間佔用比例;
  • %iowait :CPU等待磁盤I/O導致空閒狀態CPU時間佔用比例;
  • %steal :當hypervisor服務另一個虛擬處理器的時候,虛擬CPU等待實際CPU的時間的百分比(如果此值過大,說明主機分配的虛擬機數量過多)
  • %idle :CPU空閒時間佔用比例;

2、查看平均負載

使用-q選項,就能查看運行隊列中的進程數、系統上的進程和線程數、平均負載等

$ sar -q 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

15時22分35秒   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
15時22分36秒         0       503      0.00      0.00      0.00
15時22分37秒         0       503      0.00      0.00      0.00
平均時間:           0       503      0.00      0.00      0.00
  • runq-sz :運行隊列的長度(等待運行的進程數)
  • plist-sz :進程列表中進程(processes)和線程(threads)的數量
  • ldavg-1 :最近1分鐘的系統平均負載
  • ldavg-5 :最近5分鐘的系統平均負載
  • ldavg-15 :最近15分鐘的系統平均負載

3、查看內存使用狀況

使用-r選項,可查看物理內存使用狀況。

$ sar -r 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

15時16分36秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
15時16分37秒   1251336   6811288     84.48    173712   5114880   5148236     42.00
15時16分38秒   1251336   6811288     84.48    173712   5114880   5148236     42.00
平均時間:     1251336   6811288     84.48    173712   5114880   5148236     42.00
$ free 
             total       used       free     shared    buffers     cached
Mem:       8062624    6811016    1251608          0     173712    5114880
-/+ buffers/cache:    1522424    6540200
Swap:      4194296     756656    3437640
  • 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、查看I/O設備情況

使用-b選項,查看I/O和傳輸速率統計。

$ sar -b 1 10
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

16時52分34秒       tps      rtps      wtps   bread/s   bwrtn/s
16時52分35秒      0.00      0.00      0.00      0.00      0.00
16時52分36秒      0.00      0.00      0.00      0.00      0.00
16時52分37秒      0.00      0.00      0.00      0.00      0.00
16時52分38秒      2.02      0.00      2.02      0.00     24.24
16時52分39秒      1.02      0.00      1.02      0.00      8.16
16時52分40秒      0.00      0.00      0.00      0.00      0.00
16時52分41秒      0.00      0.00      0.00      0.00      0.00
16時52分42秒      0.00      0.00      0.00      0.00      0.00
16時52分43秒      0.00      0.00      0.00      0.00      0.00
16時52分44秒      5.10      0.00      5.10      0.00     89.80
平均時間:        0.81      0.00      0.81      0.00     12.18
  • tps :磁盤每秒鐘的IO總數
  • rtps :每秒鐘從磁盤讀取的IO總數
  • wtps :每秒鐘從寫入到磁盤的IO總數
  • bread/s :每秒鐘從磁盤讀取的塊總數
  • bwrtn/s :每秒鐘此寫入到磁盤的塊總數

使用-d選項,查看每個塊設備的活動。DEV 磁盤設備的名稱,如果不加-p,會顯示類似“dev11-0”的設備名稱,因此加上-p顯示的名稱更爲直觀。

$ sar -d 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

16時47分23秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
16時47分24秒   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
16時47分24秒    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

16時47分24秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
16時47分25秒   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
16時47分25秒    dev8-0      4.04      0.00     48.48     12.00      0.00      0.00      0.00      0.00

平均時間:         DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
平均時間:     dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均時間:      dev8-0      2.02      0.00     24.24     12.00      0.00      0.00      0.00      0.00

$ iostat -d 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
scd0              0.00         0.00         0.00       2000          0
sda               3.28        87.98       202.59 1984979076 4570968384

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
scd0              0.00         0.00         0.00          0          0
sda               0.00         0.00         0.00          0          0
$ sar -d -p 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

16時48分10秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
16時48分11秒      scd0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
16時48分11秒       sda      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

16時48分11秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
16時48分12秒      scd0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
16時48分12秒       sda      3.03      0.00     32.32     10.67      0.00      0.00      0.00      0.00

平均時間:         DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
平均時間:        scd0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均時間:         sda      1.53      0.00     16.33     10.67      0.00      0.00      0.00      0.00
  • tps :每秒I/O的傳輸總數
  • rd_sec/s :每秒讀取的扇區的總數
  • wr_sec/s :每秒寫入的扇區的總數
  • avgrq-sz :平均每次磁盤I/O操作的數據大小(扇區)
  • avgqu-sz :磁盤請求隊列的平均長度
  • await :從請求磁盤操作到系統完成處理,每次請求的平均消耗時間,包括請求隊列等待時間,單位是毫秒(1秒等於1000毫秒),等於尋道時間+隊列時間+服務時間
  • svctm :I/O的服務處理時間,即不包括請求隊列中的時間
  • %util :I/O請求佔用的CPU百分比,值越高,說明I/O越慢

5、查看網絡情況

使用-n選項,結合關鍵詞,查看網絡相關情況。
【用法】:sar [ -n { <關鍵詞> [,…] | ALL } ]
關鍵詞
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)

$ sar -n DEV 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

16時06分16秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
16時06分17秒        lo     13.13     13.13      1.57      1.57      0.00      0.00      0.00
16時06分17秒      eth0     13.13    106.06      0.80      6.40      0.00      0.00      0.00

16時06分17秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
16時06分18秒        lo     13.27     13.27      1.58      1.58      0.00      0.00      0.00
16時06分18秒      eth0     14.29    110.20      1.09      6.98      0.00      0.00      0.00

平均時間:       IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
平均時間:          lo     13.20     13.20      1.57      1.57      0.00      0.00      0.00
平均時間:        eth0     13.71    108.12      0.94      6.69      0.00      0.00      0.00
  • IFACE :本地網卡接口的名稱
  • rxpck/s :每秒鐘接受的數據包
  • txpck/s :每秒鐘發送的數據庫
  • rxKB/S :每秒鐘接受的數據包大小,單位爲KB
  • txKB/S :每秒鐘發送的數據包大小,單位爲KB
  • rxcmp/s :每秒鐘接受的壓縮數據包
  • txcmp/s :每秒鐘發送的壓縮包
  • rxmcst/s :每秒鐘接收的多播數據包
$ sar -n EDEV 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

16時08分16秒     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
16時08分17秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
16時08分17秒      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

16時08分17秒     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
16時08分18秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
16時08分18秒      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

平均時間:       IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
平均時間:          lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
平均時間:        eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • IFACE :網卡名稱
  • rxerr/s :每秒鐘接收到的損壞的數據包
  • txerr/s :每秒鐘發送的數據包錯誤數
  • coll/s :當發送數據包時候,每秒鐘發生的衝撞(collisions)數,這個是在半雙工模式下才有
  • rxdrop/s :當由於緩衝區滿的時候,網卡設備接收端每秒鐘丟掉的網絡包的數目
  • txdrop/s :當由於緩衝區滿的時候,網絡設備發送端每秒鐘丟掉的網絡包的數目
  • txcarr/s :當發送數據包的時候,每秒鐘載波錯誤發生的次數
  • rxfram/s :在接收數據包的時候,每秒鐘發生的幀對其錯誤的次數
  • rxfifo/s :在接收數據包的時候,每秒鐘緩衝區溢出的錯誤發生的次數
  • txfifo/s 在發生數據包 的時候,每秒鐘緩衝區溢出的錯誤發生的次數
$ sar -n TCP 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

16時12分15秒  active/s passive/s    iseg/s    oseg/s
16時12分16秒      0.00      0.00      6.06      9.09
16時12分17秒      0.00      0.00      2.02      2.02
平均時間:        0.00      0.00      4.04      5.56
  • active/s :新的主動連接
  • passive/s :新的被動連接
  • iseg/s :接受的段
  • oseg/s :輸出的段
$ sar -n SOCK 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

16時13分59秒    totsck    tcpsck    udpsck    rawsck   ip-frag    tcp-tw
16時14分00秒       434        26        19         1         0         0
16時14分01秒       434        26        19         1         0         0
平均時間:         434        26        19         1         0         0
  • totsck :當前被使用的socket總數
  • tcpsck :當前正在被使用的TCP的socket總數
  • udpsck :當前正在被使用的UDP的socket總數
  • rawsck :當前正在被使用於RAW的skcket總數
  • if-frag :當前的IP分片的數目
  • tcp-tw :TCP套接字中處於TIME-WAIT狀態的連接數量

6、查看頁面交換髮生狀況

$ sar -W 1 2
Linux 2.6.32-358.el6.x86_64 (localhost.localdomain) 	2020年01月16日 	_x86_64_	(4 CPU)

15時51分29秒  pswpin/s pswpout/s
15時51分30秒      0.00      0.00
15時51分31秒      0.00      0.00
平均時間:        0.00      0.00
  • pswpin/s:每秒系統換入的交換頁面(swap page)數量
  • pswpout/s:每秒系統換出的交換頁面(swap page)數量

四、總結

懷疑CPU存在瓶頸,可用 sar -u 和 sar -q 等來查看
懷疑內存存在瓶頸,可用sar -B、sar -r 和 sar -W 等來查看
懷疑I/O存在瓶頸,可用 sar -b、sar -u 和 sar -d 等來查看

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