Linux 工具 sar

linux sar命令詳解

 

sar(System Activity Reporter系統活動情況報告)是目前 Linux 上最爲全面的系統性能分析工具之一,可以從多方面對系統的活動進行報告,包括:文件的讀寫情況、系統調用的使用情況、磁盤I/OCPU效率、內存使用狀況、進程活動及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 等來查看

發佈於 2020-01-03 20:49
 
 

和sar比起來,其他Linux命令都是猹

 

和sar比起來,其他Linux命令都是猹

原創:小姐姐味道(微信公衆號ID:xjjdog),歡迎分享,轉載請保留出處。

我決定把今年裝x的機會,留給sar命令。它是一個Linux下的監控工具,一直站在鄙視鏈的頂端。之所以讓人望而生畏,主要是由於它繁多的參數。但,這麼強大的命令,並非無章可循,實際上是非常簡單的。

今天就和xjjdog一起,尋覓sar命令的隱祕之處,共同沾得帝王之氣,以便傲視羣cmd,彰顯自己側漏的霸氣!

sar命令很簡單,它的參數主要分爲四部分。其中,第二部分和第三、四部分,是可選的,也就是說,最終要的參數,就剩下一個,那就是類型。這個參數的值非常的多,我們暫且放在一邊,看一下以上命令的簡單意義。

  1. 類型,也就是我們要獲取的是哪個類型的指標數據,這裏的-n,代表的是監控一些網絡信息
  2. 類型參數,有的類型帶有參數,有的沒有。這裏的DEV,代表的是監控網卡信息
  3. 時間間隔,表示多少採樣一次數據,這裏的1就是1秒
  4. 次數,表示採樣的次數。比如時間間隔是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可以輸出當前信息)。可以很方便的使用sedawk這樣的工具進行處理。

瞭解這命令構成的各個部分,我們就可以放心大膽的來看具體的參數,都有哪些了。能不能抓到這隻猹,在此一舉。

之所以說sar命令,站在鄙視鏈的頂端,那是因爲它的參數是非常豐富的。我們再也不需要各種iostattopvmstat等五花八門的命令,只需要一個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是大寫的。由於有不同的換算方式,所以中斷的參數,分爲默認SUMALL等。

# 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,就表示的網絡流量。

  1. DEV 網卡
  2. EDEV 網卡 (錯誤)
  3. NFS NFS 客戶端
  4. NFSD NFS 服務器
  5. SOCK Sockets (套接字) (v4)
  6. IP IP 流 (v4)
  7. EIP IP 流 (v4) (錯誤)
  8. ICMP ICMP 流 (v4)
  9. EICMP ICMP 流 (v4) (錯誤)
  10. TCP TCP 流 (v4)
  11. ETCP TCP 流 (v4) (錯誤)
  12. UDP UDP 流 (v4)
  13. SOCK6 Sockets (套接字) (v6)
  14. IP6 IP 流 (v6)
  15. EIP6 IP 流 (v6) (錯誤)
  16. ICMP6 ICMP 流 (v6)
  17. EICMP6 ICMP 流 (v6) (錯誤)
  18. UDP6 UDP 流 (v6)

要命的是,這些參數的每個輸出,還都不是一樣的。可能是26個字母已經無法涵蓋這麼多參數了吧,所以sar命令統一把它加在了sar -n下面。好在我們平常使用的時候,只和DEV參數打交道既可以了。

5. 如何安裝

我們介紹過各種linux命令,像什麼topvmstatmpstatiostat...等等等等。

最常用的一套“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,歡迎添加好友,​進一步交流。​
發佈於 2021-01-10 16:18
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章