sar(System Activity Reporter)是 Linux 系統效能監控的瑞士刀,從 CPU、記憶體、I/O、網路、程序佇列到交換活動,提供歷史資料彙總與即時採樣雙重模式。本文詳細解析 8 大監控維度參數、輸出欄位含義、瓶頸診斷組合策略、資料彙總與自動化腳本,助你建立專業級效能基準線。



sar [選項] [間隔秒數] [採樣次數]
sar [選項] -f 資料檔 # 讀取二進制資料檔
sar [選項] -o 資料檔 間隔 次數 # 同時存檔與顯示
間隔秒數:採樣週期(預設 1 秒)採樣次數:採樣總數(預設 1,持續至中斷)-o 檔案:二進制儲存供事後分析-f 檔案:讀取歷史資料檔-A:所有報表彙總| 參數 | 監控維度 | 關鍵指標 | 診斷目標 |
|---|---|---|---|
| -u | CPU 使用率 | %user, %sys, %iowait, %idle | CPU 瓶頸、I/O 等待、系統負載 |
| -r | 記憶體與交換空間 | kbmemfree, kbmemused, %memused, kbbuffers, kbcached, kbcommit | 記憶體壓力、快取效率、OOM 風險 |
| -B | 記憶體分頁活動 | pgpgin/s, pgpgout/s, fault/s, majflt/s, pgsteal/s, %vmeff | 分頁頻率、主要缺頁、回收效率 |
| -b | I/O 與傳輸速率 | tps, rtps, wtps, bread/s, bwrtn/s | 磁碟 I/O 負載、讀寫比例 |
| -d | 裝置使用情況 | tps, rd_sec/s, wr_sec/s, avgrq-sz, avgqu-sz, await, svctm, %util | 磁碟飽和度、延遲、隊列長度 |
| -q | 程序佇列與負載 | runq-sz, plist-sz, ldavg-1/5/15 | 擁塞度、負載趨勢 |
| -W | 交換活動 | pswpin/s, pswpout/s | Swap 使用強度、抖動 |
| -v | 核心表狀態 | dentunusd, file-nr, inode-nr, pty-nr | 檔案句柄耗盡、inode 耗盡 |
sar -u 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
Average: all 0.00 0.00 0.17 0.00 0.00 99.83
| 欄位 | 含義 | 告警閾值 |
|---|---|---|
| %user | 用戶態佔比 | > 70% 持續 → 應用計算密集 |
| %system | 核心態佔比 | > 30% → 系統呼叫過多、鎖競爭 |
| %iowait | I/O 等待佔比 | > 20% → 磁碟瓶頸、NFS 延遲 |
| %idle | 閒置佔比 | < 10% 持續 → CPU 飽和 |
| %steal | 虛擬化偷取 | > 10% → 宿主機超售 |
sar -r 10 3
# kbmemfree, kbmemused, %memused, kbbuffers, kbcached, kbcommit, %commit
kbmemfree ≈ free 指令 free 欄(不含 buffers/cache)kbmemused ≈ free used 欄(含 buffers/cache)kbcommit:確保不 OOM 所需總記憶體(RAM+Swap)%memused > 90% 且 kbcommit 接近物理記憶體 → 擴容或優化
sar -B 10 3
# pgpgin/s, pgpgout/s, fault/s, majflt/s, pgfree/s, pgscank/s, pgscand/s, pgsteal/s, %vmeff
fault/s = major + minor faults,高頻 → 記憶體壓力majflt/s > 0 持續 → 磁碟換頁嚴重%vmeff = pgsteal/(pgscank+pgscand),< 30% → 回收效率低
sar -b 10 3
# tps, rtps, wtps, bread/s, bwrtn/s
tps:每秒 I/O 請求數(邏輯請求合併後)bread/s, bwrtn/s:區塊讀寫速率(塊/秒)
sar -d -p 10 3
# DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
| 欄位 | 含義 | 告警閾值 |
|---|---|---|
| await | 平均 I/O 完成時間(ms),含隊列等待 | > 20ms (SSD), > 100ms (HDD) |
| svctm | 裝置服務時間(ms),不含隊列 | 接近 await → 隊列短;遠小於 await → 隊列長 |
| %util | I/O 請求佔 CPU 時間比 | > 80% → 裝置飽和 |
| avgqu-sz | 平均隊列長度 | > 10 → 擁塞 |
sar -q 10 3
# runq-sz, plist-sz, ldavg-1, ldavg-5, ldavg-15
runq-sz:執行佇列長度(等待 CPU 的進程數)ldavg-1/5/15:1/5/15 分鐘負載平均runq-sz > CPU 核心數 × 2 持續 → CPU 擁塞
sar -W 10 3
# pswpin/s, pswpout/s
sar -v 10 3
# dentunusd, file-nr, inode-nr, pty-nr
file-nr 接近 /proc/sys/fs/file-max → 檔案句柄耗盡inode-nr 接近檔案系統 inode 總數 → inode 耗盡| 疑似瓶頸 | 組合指令 | 分析邏輯 |
|---|---|---|
| CPU | sar -u -q | 高 %user+%sys + 高 runq-sz = CPU 計算瓶頸;高 %iowait = I/O 導致 CPU 等待 |
| 記憶體 | sar -r -B -W | 高 %memused + 高 pgpgout/s + 高 pswpout/s = 記憶體不足觸發換頁 |
| I/O | sar -b -d -u | 高 tps/%util + 高 await + 高 %iowait = 磁碟子系統瓶頸 |
| 綜合 | sar -A | 全維度彙總,建立基準線 |
# 設定定時收集(通常已由套件安裝啟用)
cat /etc/cron.d/sysstat
# 10 分鐘收集一次,23:59 彙總日報
# 資料檔位置:/var/log/sa/saDD (DD=日期)
# 讀取歷史資料
sar -u -f /var/log/sa/sa15
sar -d -f /var/log/sa/sa15
#!/bin/bash
# daily_sar_archive.sh
DATA_DIR="/var/log/sa_archive"
mkdir -p "$DATA_DIR"
DATE=$(date +%Y%m%d)
sar -A -f /var/log/sa/sa$(date +%d) > "$DATA_DIR/sar_$DATE.txt"
# 保留 90 天
find "$DATA_DIR" -name "sar_*.txt" -mtime +90 -delete
| 問題 | 解決 |
|---|---|
| sar 指令不存在 | apt install sysstat / yum install sysstat,啟用 systemctl enable --now sysstat |
| 資料檔版本不相容 | sysstat 版本升級後舊檔可能無法讀取,建議保留文字報表 |
| CPU 核心數顯示異常 | sar -P ALL 查看各核心,sar -u 顯示 all 平均 |
| 虛擬機 %steal 高 | 宿主機資源爭用,遷移或調整配額 |
| 需要更細粒度 | pidstat (進程級), iostat -x (裝置級), mpstat (CPU 核心級) |
sar 作為系統內建、零依賴、標準化輸出的效能監控基石,掌握其 8 大維度參數組合與判讀標準,能在無外部監控系統的環境中快速完成瓶頸定位。建議將常用組合封裝為別名 alias sar_cpu='sar -u -q 5 5',並配合 sysstat 定時收集建立效能基準線,讓歷史資料成為容量規劃與異常比對的可靠依據。