sar 是很是強大性能分析命令,經過 sar 命令能夠全面的獲取系統的 CPU、運行隊列、磁盤 I/O、交換區、內存、 cpu 中斷、網絡等性能數據。
sar 命令行的經常使用格式:
sar [options] [-A] [-o file] t [n]
在命令行中, n 和 t 兩個參數組合起來定義採樣間隔和次數, t 爲採樣間隔, 是必須有的參數, n 爲採樣次數,是可選的,默認值是 1, -o file 表示將命令結果以二進制格式存放在文件中, file 在此處不是關鍵字,是文件名。 options 爲命令行選項, sar 命令的選項不少,下面只列出經常使用選項:
-A:全部報告的總和。
-u: CPU 利用率
-v:進程、節點、文件和鎖表狀態。
-p:像是當前系統中指定 CPU 使用信息。
-d:硬盤使用報告。
-r:顯示系統內存的使用狀況。
-n: 顯示網絡運行狀態。 參數後面可跟 DEV、 EDEV、 SOCK 和 FULL。 DEV 顯示網絡接口信息, EDEV 顯示網絡錯誤的統計數據, SOCK 顯示套接字信息, FULL 顯示前三參數因此信息。
-q:顯示運行隊列的大小,它與系統當時的平均負載相同
-B:內存分頁狀況
-R:顯示進程在採樣時間內的活動狀況。
-g:串口 I/O 的狀況。
-b:緩衝區使用狀況。
-a:文件讀寫狀況。
-c:系統調用狀況。
-R:進程的活動狀況。
-y:終端設備活動狀況。
-W:系統交換活動。
sar——監控 CPU數組
[sdk_test@ssdk1 server]$ sar -u 3 5 Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/28/2016 _x86_64_ (4 CPU) 03:42:32 PM CPU %user %nice %system %iowait %steal %idle 03:42:35 PM all 1.08 0.00 0.58 0.00 0.00 98.33 03:42:38 PM all 0.75 0.00 0.50 0.00 0.00 98.75 03:42:41 PM all 1.25 0.00 0.58 0.00 0.00 98.17 03:42:44 PM all 0.75 0.00 0.33 0.00 0.00 98.91 03:42:47 PM all 1.50 0.00 0.75 0.00 0.00 97.75 Average: all 1.07 0.00 0.55 0.00 0.00 98.38
%usr:用戶進程消耗的 CPU 時間百分比。
%nice: 運行正常進程消耗的 CPU 時間百分比。
%system:系統進程消耗的 CPU 時間百分比。
%iowait: I/O 等待所佔 CPU 時間百分比。
%steal:在內存緊張環境下, pagein 強制對不一樣的頁面進行的 steal 操做。
%idle: CPU 空閒狀態的時間百分比。
在全部的顯示中,咱們應主要注意%iow 和%idle, %iow 的值太高,表示硬盤存在 I/O 瓶頸, %idle 值高,表示 CPU 較空閒,若是%idle 值高但系統響應慢時,有多是 CPU 等待分配內存, 此時應加大內存容量。 %idle 值若是持續低於 10,那麼系統的 CPU 處理能力相對較低,表 明系統中最須要解決的資源是 CPU。
sar——內存和交換空間監控網絡
[sdk_test@ssdk1 server]$ sar -r 5 3 Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/28/2016 _x86_64_ (4 CPU) 03:50:06 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit 03:50:11 PM 155580 16115280 99.04 252504 12431540 3873512 23.06 03:50:16 PM 154860 16116000 99.05 252504 12431764 3873512 23.06 03:50:21 PM 155116 16115744 99.05 252504 12432000 3873512 23.06 Average: 155185 16115675 99.05 252504 12431768 3873512 23.06
[sdk_test@ssdk1 server]$ free total used free shared buffers cached Mem: 16270860 16113196 157664 464 252644 12430100 -/+ buffers/cache: 3430452 12840408 Swap: 524280 0 524280
Kbmemfree: 這個值和 free 命令中的 free 值基本一致,因此它不包括 buffer 和 cache 的空間。
kbmemused:這個值和 free 命令中的 used 值基本一致,因此它包括 buffer 和 cache 的空間。
%memused:這個值是 kbmemused 和內存總量(不包括 swap)的一個百分比。
kbbuffers 和 kbcached:這兩個值就是 free 命令中的 buffer 和 cache。
kbcommit:保證當前系統所須要的內存,即爲了確保不溢出而須要的內存(RAM+swap)。
%commit:這個值是 kbcommit 與內存總量(包括 swap)的一個百分比。
post
sar——內存分頁監控性能
[sdk_test@ssdk1 server]$ sar -B 5 3 Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/28/2016 _x86_64_ (4 CPU) 03:49:40 PM pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff 03:49:45 PM 0.00 18.47 9.64 0.00 101.20 0.00 0.00 0.00 0.00 03:49:50 PM 0.00 14.46 362.05 0.00 149.80 0.00 0.00 0.00 0.00 03:49:55 PM 0.00 136.82 1683.70 0.00 552.31 0.00 0.00 0.00 0.00 Average: 0.00 56.53 684.46 0.00 267.58 0.00 0.00 0.00 0.00
pgpgin/s:表示每秒從磁盤或 SWAP 置換到內存的字節數(KB)。
pgpgout/s:表示每秒從內存置換到磁盤或 SWAP 的字節數(KB)。
fault/s:每秒鐘系統產生的缺頁數,即主缺頁與次缺頁之和(major + minor)。
majflt/s:每秒鐘產生的主缺頁數。
this
sar——I/O 和傳送速率監控spa
[sdk_test@ssdk1 server]$ sar -b 5 3 Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/28/2016 _x86_64_ (4 CPU) 03:49:18 PM tps rtps wtps bread/s bwrtn/s 03:49:23 PM 0.80 0.00 0.80 0.00 16.00 03:49:28 PM 3.62 0.00 3.62 0.00 291.35 03:49:33 PM 2.40 0.00 2.40 0.00 189.18 Average: 2.27 0.00 2.27 0.00 165.24
tps:每秒鐘物理設備的 I/O 傳輸總量。
rtps:每秒鐘從物理設備讀入的數據總量。
wtps:每秒鐘向物理設備寫入的數據總量。
bread/s:每秒鐘從物理設備讀入的數據量,單位爲 塊/s。
bwrtn/s:每秒鐘向物理設備寫入的數據量,單位爲 塊/s。
命令行
sar——進程隊列長度和平均負載狀態監控線程
[sdk_test@ssdk1 server]$ sar -q 5 3 Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/28/2016 _x86_64_ (4 CPU) 03:48:56 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 03:49:01 PM 0 535 0.02 0.02 0.00 03:49:06 PM 0 536 0.01 0.02 0.00 03:49:11 PM 0 536 0.01 0.02 0.00 Average: 0 536 0.01 0.02 0.00
runq-sz:運行隊列的長度(等待運行的進程數)。
plist-sz:進程列表中進程(processes)和線程(threads)的數量。
ldavg-1:最後 1 分鐘的系統平均負載(System load average)。
ldavg-5:過去 5 分鐘的系統平均負載。
ldavg-15:過去 15 分鐘的系統平均負載。
code
sar——系統交換活動信息監控server
[sdk_test@ssdk1 server]$ sar -W 3 5 Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/28/2016 _x86_64_ (4 CPU) 03:45:41 PM pswpin/s pswpout/s 03:45:44 PM 0.00 0.00 03:45:47 PM 0.00 0.00 03:45:50 PM 0.00 0.00 03:45:53 PM 0.00 0.00 03:45:56 PM 0.00 0.00 Average: 0.00 0.00
pswpin/s:每秒系統換入的交換頁面(swap page)數量。
pswpout/s:每秒系統換出的交換頁面(swap page)數量。
sar——設備使用狀況監控
[sdk_test@ssdk1 server]$ sar -d 5 3 Linux 2.6.32-431.11.15.el6.ucloud.x86_64 (ssdk1) 10/28/2016 _x86_64_ (4 CPU) 04:16:22 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 04:16:27 PM dev252-0 0.40 0.00 6.41 16.00 0.00 0.00 0.00 0.00 04:16:27 PM dev252-16 0.80 0.00 155.51 194.00 0.00 1.00 1.00 0.08 04:16:27 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 04:16:32 PM dev252-0 1.80 0.00 16.03 8.89 0.00 0.00 0.00 0.00 04:16:32 PM dev252-16 1.20 0.00 142.69 118.67 0.00 1.50 0.83 0.10 04:16:32 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 04:16:37 PM dev252-0 1.20 0.00 20.80 17.33 0.00 0.00 0.00 0.00 04:16:37 PM dev252-16 1.00 0.00 68.80 68.80 0.00 1.40 1.00 0.10 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: dev252-0 1.13 0.00 14.42 12.71 0.00 0.00 0.00 0.00 Average: dev252-16 1.00 0.00 122.30 122.13 0.00 1.33 0.93 0.09
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 等來查看