linux中查看系統活動情況報告sar命令詳解

參考:https://www.phpmianshi.com/?id=107

有很多工具可以看網絡流量,但我最喜歡sar。

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

 

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:輸出系統交換活動信息

 

sar 既能報告當前數據,也能報告歷史數據

不帶選項執行會以10分鐘爲間隔報告自午夜起當天的CPU利用率。這個粒度太粗,需要修改爲1分鐘。修改方法:

vi /etc/cron.d/sysstat
#將這一行:
*/10 * * * * root /usr/lib64/sa/sa1 1 1
#更換爲:
*/1 * * * * root /usr/lib64/sa/sa1 1 1

 

比如查看本月23號以來服務器的平均負載狀況

sar -q -f /var/log/sa/sa23

 

統計網絡信息 sar -n
 

    -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)

 

 

1. sar -n DEV 1   即可每秒刷新一次網絡流量。

[root@dev logs]#     sar -n DEV 1
Linux 2.6.32-504.30.3.el6.x86_64 (dev.aigupiao.com)     05/31/20        _x86_64(2 CPU)

20:09:14        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
20:09:15        lo      0.00    0.00      0.00      0.00      0.00      0.00      0.00
20:09:15        eth0    2718.18   2111.11   1424.46    497.72      0.00      0.00      0.00

20:09:15         IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
IFACE  本地網卡接口的名稱
rxpck/s  每秒鐘接受的數據包
txpck/s  每秒鐘發送的數據庫
rxKB/S  每秒鐘接受的數據包大小,單位爲KB
txKB/S  每秒鐘發送的數據包大小,單位爲KB
rxcmp/s  每秒鐘接受的壓縮數據包
txcmp/s  每秒鐘發送的壓縮包
rxmcst/s  每秒鐘接收的多播數據包

 

當然,你也可以使用ifstat、nload、iptraf等命令查看。然而數據來源,還是來自我們的/proc目錄
watch cat /proc/net/dev查看佔流量最大的IP
有時候我們發現網絡帶寬佔用非常高,但我們無法判斷到底流量來自哪裏。這時候,iftop就可以幫上忙了。

 

2. sar -n EDEV 1 1 網絡設備通信失敗信息

[root@super-task-cron logs]# sar -n EDEV 1 1
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

07:59:22 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
07:59:23 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
07:59:23 PM        lo      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    在發生數據包 的時候,每秒鐘緩衝區溢出的錯誤發生的次數

 

3. sar -n SOCK 1 1 統計socket連接信息 

[root@super-task-cron logs]# sar -n SOCK 1 1
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:03:33 PM    totsck    tcpsck    udpsck    rawsck   ip-frag    tcp-tw
08:03:34 PM       206        64         2         0         0         8
Average:          206        64         2         0         0         8
totsck  當前被使用的socket總數
tcpsck  當前正在被使用的TCP的socket總數
udpsck  當前正在被使用的UDP的socket總數
rawsck  當前正在被使用於RAW的skcket總數
if-frag  當前的IP分片的數目
tcp-tw  TCP套接字中處於TIME-WAIT狀態的連接數量

 

4. sar -n TCP 1 1 TCP連接的統計 

[root@super-task-cron logs]# sar -n TCP 1 1
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:06:27 PM  active/s passive/s    iseg/s    oseg/s
08:06:28 PM      1.00      0.00   1114.00   1140.00
Average:         1.00      0.00   1114.00   1140.00
active/s  新的主動連接
passive/s  新的被動連接
iseg/s  接受的段
oseg/s  輸出的段

 

5. sar -u  或 sar(默認) 查看CPU和IOWAIT統計狀態

  

[root@super-task-cron logs]# sar -u 1 3  
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:16:05 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
08:16:06 PM     all      7.07      0.00      3.03      0.00      0.00     89.90
08:16:07 PM     all      7.54      0.00      2.01      0.00      0.00     90.45
08:16:08 PM     all      7.11      0.00      2.03      0.00      0.00     90.86
Average:        all      7.24      0.00      2.36      0.00      0.00     90.40

 

%user   用戶空間的CPU使用
%nice   改變過優先級的進程的CPU使用率
%system   內核空間的CPU使用率
%iowait   CPU等待IO的百分比 
%steal   虛擬機的虛擬機CPU使用的CPU
%idle   空閒的CPU

主要看%iowait和%idle,%iowait過高表示存在I/O瓶頸,即磁盤IO無法滿足業務需求,如果%idle過低表示CPU使用率比較嚴重,需要結合內存使用等情況判斷CPU是否瓶頸。 

 

6.sar -q 1 1 查看平均負載

[root@super-task-cron logs]# sar -q 1 3
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:20:36 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
08:20:37 PM         0       156      0.12      0.17      0.21         0
08:20:38 PM         0       157      0.11      0.16      0.21         0
08:20:39 PM         0       157      0.11      0.16      0.21         0
Average:            0       157      0.11      0.16      0.21         0
runq-sz    運行隊列的長度(等待運行的進程數,每核的CP不能超過3個)
plist-sz   進程列表中的進程(processes)和線程數(threads)的數量
ldavg-1  最後1分鐘的CPU平均負載,即將多核CPU過去一分鐘的負載相加再除以核心數得出的平均值,5分鐘和15分鐘以此類推
ldavg-5   最後5分鐘的CPU平均負載
ldavg-15  最後15分鐘的CPU平均負載

 

7.sar -r 1 1或者 sar -S 查看內存使用情況

[root@super-task-cron logs]# sar -r 1 1
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:22:27 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
08:22:28 PM    333488   3546736     91.41    478972    941360   2581244     66.52   1027676    775288       856
Average:       333488   3546736     91.41    478972    941360   2581244     66.52   1027676    775288       856
kbmemfree   空閒的物理內存大小
kbmemused   使用中的物理內存大小
%memused  物理內存使用率
kbbuffers  內核中作爲緩衝區使用的物理內存大小,kbbuffers和kbcached:這兩個值就是free命令中的buffer和cache. 
kbcached  緩存的文件大小
kbcommit   保證當前系統正常運行所需要的最小內存,即爲了確保內存不溢出而需要的最少內存(物理內存+Swap分區)
commit   這個值是kbcommit與內存總量(物理內存+swap分區)的一個百分比的值

 

內存使用情況提示:服務器內存佔用量較高的情況其實非常正常。這是因爲內存的讀寫速度及效率遠高於服務器磁盤,因此操作系統傾向於將內存作爲緩衝機制預先載入數據,從而提高數據讀取速度。

同樣,內存使用百分比也並不是什麼大問題(除非大家沒有設置虛擬內存分區,但這也與內存本身無關)。大家真正需要關注的是虛擬內存使用百分比,因爲 只有在服務器的物理內存被全部佔用後、虛擬內存纔會接替而上發揮作用。這一數字越低,就說明服務器的運行狀態越好。如果虛擬內存使用率爲0%,則意味着我 們的服務器能夠完全利用物理內存執行任務。

那麼虛擬內存使用率達到多少纔算過高?這取決於大家自己的感覺。一般來說,如果虛擬內存使用率一直不高、那麼我們的服務器的運行狀態還是比較理想 的。如果大家發現虛擬內存使用率隨時間不斷提升(例如由1%到7%再到32%),這就代表服務器上的某些進程正在瘋狂吞噬內存,我們需要及時展開調查以了 解具體情況(而不該直接安裝更多內存)。一旦服務器用盡了所有物理內存與虛擬內存,那麼整套系統的運行將變得極爲緩慢,需要經過重啓才能暫時恢復正常。

 

8.sar -W 1 3 查看系統SWAP分區統計

[root@super-task-cron logs]# sar -W 1 3 
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:24:09 PM  pswpin/s pswpout/s
08:24:10 PM      0.00      0.00
08:24:11 PM      0.00      0.00
08:24:12 PM      0.00      0.00
Average:         0.00      0.00
pswpin/s    每秒從交換分區到系統的交換頁面(swap page)數量
pswpott/s   每秒從系統交換到swap的交換頁面(swap page)的數量

9.sar -b 1 1 查看IO傳遞速率

[root@super-task-cron logs]# sar -b 1 1 
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:25:31 PM       tps      rtps      wtps   bread/s   bwrtn/s
08:25:32 PM      0.00      0.00      0.00      0.00      0.00
Average:         0.00      0.00      0.00      0.00      0.00
tps  磁盤每秒鐘的IO總數,等於iostat中的tps
rtps  每秒鐘從磁盤讀取的IO總數
wtps  每秒鐘從寫入到磁盤的IO總數
bread/s  每秒鐘從磁盤讀取的塊總數
bwrtn/s  每秒鐘此寫入到磁盤的塊總數

 

10.sar -d 1 1 查看磁盤使用情況

[root@super-task-cron logs]# sar -d  1 1
Linux 3.10.0-1062.9.1.el7.x86_64 (super-task-cron.aigupiao.com)         06/03/2020      _x86_64_        (2 CPU)

08:26:30 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
08:26:31 PM  dev253-0      0.99      0.00     23.76     24.00      0.00      1.00      1.00      0.10
08:26:31 PM dev253-16      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
08:26:31 PM   dev11-0      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:     dev253-0      0.99      0.00     23.76     24.00      0.00      1.00      1.00      0.10
Average:    dev253-16      0.00      0.00      0.00      0.00      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
DEV  磁盤設備的名稱,如果不加-p,會顯示dev253-0類似的設備名稱,因此加上-p顯示的名稱更直接
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越慢

 

1. avgqu-sz 的值較低時,設備的利用率較高。

2. 當%util的值接近 1% 時,表示設備帶寬已經佔滿。

 

常用總結:

(1) sar -b 1 1        // IO傳送速率
(2) sar -B 1 1        // 頁交換速率
(3) sar -c 1 1        // 進程創建的速率
(4) sar -d 1 1        // 塊設備的活躍信息
(5) sar -n DEV 1 1    // 網路設備的狀態信息
(6) sar -n SOCK 1 1   // SOCK的使用情況
(7) sar -n ALL 1 1    // 所有的網絡狀態信息
(8) sar -P ALL 1 1    // 每顆CPU的使用狀態信息和IOWAIT統計狀態 
(9) sar -q 1 1        // CPU隊列的長度(等待運行的進程數)和負載的狀態
(10) sar -r 1 1      // 內存和swap空間使用情況
(11) sar -R 1 1       // 內存的統計信息(內存頁的分配和釋放、系統每秒作爲BUFFER使用內存頁、每秒被cache到的內存頁)
(12) sar -u 1 1       // CPU的使用情況和IOWAIT信息(同默認監控)
(13) sar -v 1 1       // inode, file and other kernel tablesd的狀態信息
(14) sar -w 1 1       // 每秒上下文交換的數目
(15) sar -W 1 1       // SWAP交換的統計信息(監控狀態同iostat 的si so)
(16) sar -x 2906 1 1  // 顯示指定進程(2906)的統計信息,信息包括:進程造成的錯誤、用戶級和系統級用戶CPU的佔用情況、運行在哪顆CPU上
(17) sar -y 1 1       // TTY設備的活動狀態
(18) 將輸出到文件(-o)和讀取記錄信息(-f)

 

要判斷系統瓶頸問題,有時需幾個 sar 命令選項結合起來

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

數據從何而來

/proc目錄是一個虛擬目錄,存儲的是當前內核的一系列特殊文件
比如top的load (使用uptime命令得到同樣的結果)。讀取的就是
/proc/loadavg 文件
而每核cpu的信息,讀取
/proc/stat文件
這些命令,是對/proc目錄中一系列信息的解析和友好的展示

 

  1. 每個進程都有一個pid,比如18,在 /proc/18中有很多有用的信息

  2. /proc/18/env  跟這個進程相關的環境變量

  3. /proc/18/fd    所有的file description

  4. /proc/18/cmdline  進程啓動時的命令行參數

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