天天看點

關于SAR指令的一些知識

文章目錄

      • sar指令基礎
        • 1. 輸出
          • 1.1 -f 參數
          • 1.2 -P 參數
          • 1.3 其他參數說明
        • 2. 起源
        • 3. 示例
      • 參考文檔

sar指令基礎

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

    選項為:

[ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -F [ MOUNT ] ] [ -H ] [ -h ] [ -p ] [ -q ] [ -R ]

[ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ]

[ -I { [,…] | SUM | ALL | XALL } ] [ -P { [,…] | ALL } ]

[ -m { [,…] | ALL } ] [ -n { [,…] | ALL } ]

[ -j { ID | LABEL | PATH | UUID | … } ]

[ -f [ ] | -o [ ] | -[0-9]+ ]

[ -i ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]

    sar指令将累計活動計數器的内容輸出到标準輸出。作業系統包含許多計數器,這些計數器會随着各種系統操作的發生而增加。各種系統計數器包括:

  • 系統機關使用率計數器
  • 緩沖區使用計數器
  • 磁盤和錄音帶I / O活動計數器
  • tty裝置活動計數器
  • 開關和子程式計數器
  • 檔案通路計數器
  • 隊列活動計數器
  • 程序間通信計數器

        sar指令根據執行次數和執行間隔兩個參數執行指令,如果執行間隔參數設定為零,則sar指令顯示自系統啟動以來的平均統計資訊;如果指定間隔參數時沒有執行次數參數,則會連續生成報告。

        收集的資料除了顯示在螢幕上之外,還可以儲存在以 “-o filename” 參數指定的檔案中。如果省略filename,則sar将資訊寫入标準的系統活動每日資料檔案,即/var/log/sa/sadd 檔案,其中dd參數訓示目前日期,該檔案為二進制檔案,無法使用vim/less等指令檢視内容。預設情況下,核心中可用的所有資料都儲存在資料檔案中。

# ll /var/log/sa
total 43548
-rw-r--r-- 1 root root 811040 Nov  1 23:50 sa01
-rw-r--r-- 1 root root 893984 Nov  2 23:50 sa02
...
-rw-r--r-- 1 root root 811040 Oct 31 23:50 sa31
-rw-r--r-- 1 root root 636708 Nov  1 23:53 sar01
-rw-r--r-- 1 root root 678696 Nov  2 23:53 sar02
...
-rw-r--r-- 1 root root 618216 Oct 31 23:53 sar31
           

1. 輸出

    可以選擇參數顯示特定系統活動的資訊。不指定任何參數預設輸出CPU資料。指定-A标志将輸出所有的系統采集資料。

# sar -A
           

如果CPU使用率接近100%(user + nice + system),則sar采樣的工作負載受CPU限制。

    如果需要多個樣本和多個報告,則可以友善地為sar指令指定輸出檔案。将sar指令作為背景程序運作。其文法為:

sar -o datafile interval count >/dev/null 2>&1 &
           

    示例:每2秒統計一次CPU情況,共30次,結果輸出到datafile檔案

# sar -o datafile -u 2 30 >/dev/null 2>&1 &   
[1] 8355
           

    所有資料都以二進制形式儲存到一個檔案(資料檔案)中。然後可以使用sar指令配合 -f 選項選擇性地顯示資料。

1.1 -f 參數

    sar指令可以對先前儲存在檔案中的記錄進行提取和寫入。此檔案可以是由 -f 标志指定的檔案,也可以預設為标準系統活動每日資料檔案。也可以輸入-1、-2等作為sar的參數來顯示前幾天的資料。

    示例:今天是11月18日,查詢3天前的資料

# sar -3
Linux 3.10.0-1062.4.1.el7.x86_64 (localhost.localdomain)        2019年11月15日  _x86_64_        (2 CPU)

08時14分56秒       LINUX RESTART

08時20分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
08時30分01秒     all      0.16      0.00      0.19      0.01      0.00     99.63
08時40分01秒     all      0.12      0.00      0.14      0.01      0.00     99.73
...
           

    也可以使用 -f ,輸出結果是一樣的:

# sar -f /var/log/sa/sa15
Linux 3.10.0-1062.4.1.el7.x86_64 (localhost.localdomain)        2019年11月15日  _x86_64_        (2 CPU)

08時14分56秒       LINUX RESTART

08時20分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
08時30分01秒     all      0.16      0.00      0.19      0.01      0.00     99.63
08時40分01秒     all      0.12      0.00      0.14      0.01      0.00     99.73
...
           
1.2 -P 參數

    如果沒有-P标志,sar指令将報告整個系統(也就是所有處理器)中的統計資訊,這些統計資訊将計算為所有值的平均值,單一取值使用百分比表示。如果給定了 -P 标志,則sar指令将報告與指定的一個或多個處理器相關的活動。如果給定-P ALL,則sar指令将報告每個處理器的統計資訊和所有處理器之間的全局統計資訊。

    示例:伺服器為雙核

# sar -P 0
Linux 3.10.0-1062.4.1.el7.x86_64 (localhost.localdomain)        2019年11月18日  _x86_64_        (2 CPU)

08時17分48秒       LINUX RESTART

08時20分02秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
...
15時50分01秒       0      0.05      0.00      0.14      0.00      0.00     99.81
# sar -P 1
Linux 3.10.0-1062.4.1.el7.x86_64 (localhost.localdomain)        2019年11月18日  _x86_64_        (2 CPU)

08時17分48秒       LINUX RESTART

08時20分02秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
...
15時50分01秒       1      0.05      0.00      0.07      0.01      0.00     99.87
# sar -P ALL
Linux 3.10.0-1062.4.1.el7.x86_64 (localhost.localdomain)        2019年11月18日  _x86_64_        (2 CPU)

08時17分48秒       LINUX RESTART

08時20分02秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
...
15時40分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
15時50分01秒     all      0.05      0.00      0.10      0.01      0.00     99.84
15時50分01秒       0      0.05      0.00      0.14      0.00      0.00     99.81
15時50分01秒       1      0.05      0.00      0.07      0.01      0.00     99.87
           
1.3 其他參數說明

-A 彙總所有的報告

-a 報告檔案讀寫使用情況

-B 報告附加的緩存的使用情況

-b 報告緩存的使用情況

-c 報告系統調用的使用情況

-d 報告磁盤的使用情況

-g 報告序列槽的使用情況

-h 報告關于buffer使用的統計資料

-m 報告IPC消息隊列和信号量的使用情況

-n 報告命名cache的使用情況

-p 報告調頁活動的使用情況

-q 報告運作隊列和交換隊列的平均長度

-R 報告程序的活動情況

-r 報告沒有使用的記憶體頁面和硬碟塊

-u 報告CPU的使用率

-v 報告程序、i節點、檔案和鎖表狀态

-w 報告系統交換活動狀況

-y 報告TTY裝置活動狀況

2. 起源

    sar指令是由sysstat軟體包提供的。系統使用crontab周期性的調用sar指令,将資料寫入日志。

# cat /etc/cron.d/sysstat 
# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# 0 * * * * root /usr/lib64/sa/sa1 600 6 &
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A
           

    相關目錄下,有sa1,sa2 兩個shell腳本和sadc一個二進制執行程式:

# ls /usr/lib64/sa
sa1  sa2  sadc
           

    通過查閱兩個腳本,可知:腳本sa1通過調用sadc程式,結合crontab,每10分鐘将二進制資料收集、存儲進系統活動資料檔案中;腳本sa2每天23:53調用sar指令,生成日報。雖然都寫到/var/log/sa目錄中,但腳本sa1生成的是二進制檔案,檔案名稱類似“sa01”;而腳本sa2生成的是普通檔案,可以使用vim/less進行檢視編輯,檔案名稱類似“sar01”。

    日志保留的天數由 /etc/sysconfig/sysstat 檔案控制。預設值為28。

3. 示例

sar -u 2 5
           

每2秒報告CPU使用率,顯示5行。

sar -I 14 -o int14.file 2 10
           

每2秒報告IRQ 14的統計資訊,顯示10行。資料存儲在名為int14.file的檔案中。

sar -r -n DEV -f /var/log/sa/sa16
           

顯示每日資料檔案“sa16”中儲存的記憶體和網絡統計資訊。

sar -A
           

顯示儲存在目前每日資料檔案中的所有統計資訊。

參考文檔

https://linux.die.net/man/1/sar

http://www.softpanorama.org/Admin/Monitoring/sar.shtml

https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/sar.html

繼續閱讀