linux工具之sar


sar`(System Activity Reporter 系統活動情況報告)是目前 Linux 上最為全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告,包括:文件的讀寫情況、系統調用的使用情況、磁盤 I/O、CPU 效率、內存使用狀況、進程活動及 IPC 有關的活動等。

我們可以使用sar命令來獲得整個系統性能的報告。這有助於我們定位系統性能的瓶頸,並且有助於我們找出這些煩人的性能問題的解決方法。

Linux 內核維護着一些內部計數器,這些計數器包含了所有的請求及其完成時間和 I/O 塊數等信息,sar命令從所有的這些信息中計算出請求的利用率和比例,以便找出瓶頸所在。

sar命令主要的用途是生成某段時間內所有活動的報告,因此必需確保sar`命令在適當的時間進行數據采集(而不是在午餐時間或者周末)

命令參數

用法: sar [ 選項 ] [ <時間間隔> [ <次數> ] ]

主選項和報告:
	-b	I/O 和傳輸速率信息狀況
	-B	分頁狀況
	-d	塊設備狀況
	-I { <中斷> | SUM | ALL | XALL }
		中斷信息狀況
	-m	電源管理信息狀況
	-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)
	-q	隊列長度和平均負載
	-r	內存利用率
	-R	內存狀況
	-S	交換空間利用率
	-u [ ALL ]
		CPU 利用率
	-v	Kernel table 狀況
	-w	任務創建與系統轉換統計信息
	-W	交換信息
	-y	TTY 設備狀況
	-o {<文件路徑>}
	   將命令結果以二進制格式存放在指定文件中

常用命令

sar命令來自於sysstat工具包,如果提示sar命令不存在,需先安裝sysstat

網絡統計信息

sar -n <關鍵詞> [ <時間間隔> [ <次數> ] ]

示例:

命令中 1 5 表示每一秒鍾取 1 次值,一共取 5 次。

命令執行后會列出每個網卡這 5 次取值的平均數據,根據實際情況來確定帶寬跑滿的網卡名稱,

CPU 利用率

sar -u [ <時間間隔> [ <次數> ] ]

示例:

root@ubuntu:~# sar -u  1 3
Linux 4.15.0-20-generic (ubuntu) 	09/18/2019 	_x86_64_	(2 CPU)
01:44:59 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:45:00 AM     all      0.50      0.00      2.50      0.00      0.00     97.00
01:45:01 AM     all      1.02      0.00      1.53      0.00      0.00     97.45
01:45:02 AM     all      2.01      0.00      3.52     11.56      0.00     82.91
Average:        all      1.18      0.00      2.52      3.87      0.00     92.44
root@ubuntu:~# 

命令中 1 3 表示每一秒鍾取 1 次值,一共取 3 次。

輸出項說明:

CPU:all 表示統計信息為所有 CPU 的平均值。

%user:顯示在用戶級別(application)運行使用 CPU 總時間的百分比

%nice:顯示在用戶級別,用於nice操作,所占用 CPU 總時間的百分比
	 即:用戶進程空間內改變過優先級的進程占用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

索引節點,文件和其他內核表的狀態

sar -v [ <時間間隔> [ <次數> ] ]

示例:

root@ubuntu:~# sar -v 1 3
Linux 4.15.0-20-generic (ubuntu) 	09/18/2019 	_x86_64_	(2 CPU)

01:50:30 AM dentunusd   file-nr  inode-nr    pty-nr
01:50:31 AM     10487      7104     28040         2
01:50:32 AM     10487      7104     28040         2
01:50:33 AM     10487      7104     28040         2
Average:        10487      7104     28040         2
root@ubuntu:~# 

輸出項說明:

dentunusd:目錄高速緩存中未被使用的條目數量

file-nr:文件句柄(file handle)的使用數量

inode-nr:索引節點句柄(inode handle)的使用數量

pty-nr:使用的 pty 數量

內存利用率

sar -r [ <時間間隔> [ <次數> ] ]

示例:

root@ubuntu:~# sar -r 1 3
Linux 4.15.0-20-generic (ubuntu) 	09/18/2019 	_x86_64_	(2 CPU)

01:51:59 AM kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
01:52:00 AM   6829576   7191212   1314884     16.14     77508    494124   2902068     16.58    409396    587336       920
01:52:01 AM   6829576   7191212   1314884     16.14     77508    494124   2902068     16.58    409396    587336       920
01:52:02 AM   6829576   7191212   1314884     16.14     77508    494124   2902068     16.58    409396    587336       932
Average:      6829576   7191212   1314884     16.14     77508    494124   2902068     16.58    409396    587336       924
root@ubuntu:~# 

輸出項說明:

kbmemfree:這個值和 free 命令中的 free 值基本一致,所以它不包括 buffer 和 cache 的空間

kbmemused:這個值和 free 命令中的 used 值基本一致,所以它包括 buffer 和 cache 的空間

%memused:這個值是 kbmemused 和內存總量(不包括 swap)的一個百分比

kbbuffers 和 kbcached:這兩個值就是 free 命令中的 buffer 和 cache

kbcommit:保證當前系統所需要的內存,即為了確保不溢出而需要的內存(RAM + swap)

%commit:這個值是 kbcommit 與內存總量(包括 swap)的一個百分比

Kbactive:活動內存量(以千字節計算)(最近使用的內存,通常不會被收回,除非絕對必要)

kbinact:不活動內存量(以千字節計算的內存(最近使用的內存),更有資格被用於其他目的)。

kbdirty:以KB為單位的內存量等待寫入磁盤

內存分頁狀況

sar -B [ <時間間隔> [ <次數> ] ]

示例:

root@ubuntu:~# sar -B 1 3
Linux 4.15.0-20-generic (ubuntu) 	09/18/2019 	_x86_64_	(2 CPU)

01:57:43 AM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
01:57:44 AM      0.00      0.00     18.00      0.00      4.00      0.00      0.00      0.00      0.00
01:57:45 AM      0.00      0.00      2.00      0.00      2.00      0.00      0.00      0.00      0.00
01:57:46 AM      0.00      0.00      0.00      0.00      3.00      0.00      0.00      0.00      0.00
Average:         0.00      0.00      6.67      0.00      3.00      0.00      0.00      0.00      0.00
root@ubuntu:~# 

輸出項說明:

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)的百分比

I/O 和傳輸速率信息狀況

sar -b [ <時間間隔> [ <次數> ] ]

示例:

root@ubuntu:~# sar -b 1 3
Linux 4.15.0-20-generic (ubuntu) 	09/18/2019 	_x86_64_	(2 CPU)

01:59:58 AM       tps      rtps      wtps   bread/s   bwrtn/s
01:59:59 AM      2.00      0.00      2.00      0.00    128.00
02:00:00 AM      0.00      0.00      0.00      0.00      0.00
02:00:01 AM      0.00      0.00      0.00      0.00      0.00
Average:         0.67      0.00      0.67      0.00     42.67
root@ubuntu:~# 

輸出項說明:

tps:每秒鍾物理設備的 I/O 傳輸總量

rtps:每秒鍾從物理設備讀入的數據總量

wtps:每秒鍾向物理設備寫入的數據總量

bread/s:每秒鍾從物理設備讀入的數據量,單位為:塊/s

bwrtn/s:每秒鍾向物理設備寫入的數據量,單位為:塊/s

隊列長度和平均負載

sar -q [ <時間間隔> [ <次數> ] ]

示例:

root@ubuntu:~# sar -q 1 3
Linux 4.15.0-20-generic (ubuntu) 	09/18/2019 	_x86_64_	(2 CPU)

02:01:22 AM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
02:01:23 AM         0       430      0.15      0.07      0.18         0
02:01:24 AM         0       430      0.15      0.07      0.18         0
02:01:25 AM         0       431      0.15      0.07      0.18         0
Average:            0       430      0.15      0.07      0.18         0
root@ubuntu:~# 

輸出項說明:

runq-sz:運行隊列的長度(等待運行的進程數)

plist-sz:進程列表中進程(processes)和線程(threads)的數量

ldavg-1:最后1分鍾的系統平均負載(System load average)

ldavg-5:過去5分鍾的系統平均負載

ldavg-15:過去15分鍾的系統平均負載

blocked:當前阻塞的任務數,等待I / O完成

系統交換信息

sar -q [ <時間間隔> [ <次數> ] ]

示例:

[root@node-1 yum.repos.d]#  sar -W 5 3
Linux 3.10.0-327.20.1.es2.el7.x86_64 (node-1.domain.tld) 	09/18/2019 	_x86_64_	(8 CPU)

05:19:59 PM  pswpin/s pswpout/s
05:20:04 PM      0.00      0.00
05:20:09 PM      0.00     64.00
05:20:14 PM      0.00      0.00
Average:         0.00     21.33
[root@node-1 yum.repos.d]# 

輸出項說明:

pswpin/s:每秒系統換入的交換頁面(swap page)數量
pswpout/s:每秒系統換出的交換頁面(swap page)數量

塊設備狀況

sar -d [ <時間間隔> [ <次數> ] ]

示例:

[root@node-1 ~]# sar -d 1 3
Linux 3.10.0-327.20.1.es2.el7.x86_64 (node-1.domain.tld) 	09/18/2019 	_x86_64_	(8 CPU)

05:21:21 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
05:21:22 PM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:21:22 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:21:22 PM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:21:22 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:21:22 PM  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

05:21:22 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
05:21:23 PM    dev8-0      3.00      0.00    192.00     64.00      0.00      0.00      0.00      0.00
05:21:23 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:21:23 PM  dev253-0     24.00      0.00    192.00      8.00      0.00      0.00      0.00      0.00
05:21:23 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:21:23 PM  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

05:21:23 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
05:21:24 PM    dev8-0      4.00      8.00    160.00     42.00      0.00      0.00      0.00      0.00
05:21:24 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:21:24 PM  dev253-0     18.00      8.00    160.00      9.33      0.00      0.00      0.00      0.00
05:21:24 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:21:24 PM  dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:       dev8-0      2.33      2.67    117.33     51.43      0.00      0.00      0.00      0.00
Average:      dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-0     14.00      2.67    117.33      8.57      0.00      0.00      0.00      0.00
Average:     dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-2      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
[root@node-1 ~]# 

輸出項說明:

參數-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% 時,表示設備帶寬已經占滿。

輸出統計的數據信息

示例:

[root@node-1 ~]# sar -o sarfile.log -u 1 3
Linux 3.10.0-327.20.1.es2.el7.x86_64 (node-1.domain.tld) 	09/18/2019 	_x86_64_	(8 CPU)
05:24:18 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
05:24:19 PM     all     16.96      0.00      4.68      0.00      0.00     78.35
05:24:20 PM     all      5.68      0.00      1.26      0.00      0.00     93.06
05:24:21 PM     all      8.06      0.00      3.53      0.00      0.00     88.41
Average:        all     10.23      0.00      3.16      0.00      0.00     86.62
[root@node-1 ~]# 

上述示例命令會將sar -u 1 3采集到的數據以二進制的格式存放到文件sarfile.log中。

我們還可以通過命令sadf -d sarfile.log將二進制數據文件轉換成數據庫可讀的格式。

sadf -d sarfile.log | sed 's/;/,/g' > sarfile.csv

也可以將這些數據存儲在一個 csv 文檔中,然后繪制成圖表展示方式,如下所示:

從數據文件讀取信息

sar -f <文件路徑>

示例:

又將之前存儲在二進制文件中的數據給讀取並展示出來。

[root@node-1 ~]# sar -f sarfile.log
Linux 3.10.0-327.20.1.es2.el7.x86_64 (node-1.domain.tld) 	09/18/2019 	_x86_64_	(8 CPU)

05:24:18 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
05:24:19 PM     all     16.96      0.00      4.68      0.00      0.00     78.35
05:24:20 PM     all      5.68      0.00      1.26      0.00      0.00     93.06
05:24:21 PM     all      8.06      0.00      3.53      0.00      0.00     88.41
Average:        all     10.23      0.00      3.16      0.00      0.00     86.62
[root@node-1 ~]# 

性能問題排查技巧

  • 懷疑 CPU 存在瓶頸,可用sar -usar -q等來查看
  • 懷疑內存存在瓶頸,可用sar -Bsar -rsar -W等來查看
  • 懷疑 I/O 存在瓶頸,可用sar -bsar -usar -d等來查看


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM