sar (System Activity Reporter) 是 sysstat 套件核心工具,能從內核統計計數器採集歷史/實時性能數據,支援 CPU、內存、磁碟 I/O、網絡、運行佇列、交換活動、系統調用等 10+ 維度。本文系統梳理 sar 常用選項、關鍵指標含義、實戰分析案例、數據持久化與圖形化展示,構建 Linux 性能診斷標準化流程。
yum install -y sysstat # 或 apt install sysstat
# 關鍵:啟用系統級數據收集守護進程 (sadc)
systemctl enable --now sysstat
# 或編輯 /etc/default/sysstat (Debian) /etc/sysconfig/sysstat (RHEL)
# ENABLED="true"
# SA1_OPTIONS="-S DISK" # 包含磁碟統計
# SA2_OPTIONS="-A" # 每日報告包含所有統計
# 手動觸發採集 (cron 每 10 分鐘)
/usr/lib64/sa/sa1 1 1 # 採集 1 秒 1 次,寫入 /var/log/sa/saDD
/usr/lib64/sa/sa2 -A # 生成每日報告 /var/log/sa/sarDD
| 選項 | 報告內容 | 關鍵指標 | 適用場景 |
|---|---|---|---|
-u | CPU 利用率 | %user, %system, %iowait, %idle, %steal | CPU 瓶頸、虛擬化竊佔 |
-r | 內存使用 | kbmemfree, kbmemused, %memused, kbbuffers, kbcached, kbcommit, %commit | 內存壓力、提交額度 |
-R | 內存統計 (頁面) | frmpg/s, bufpg/s, campg/s, pgpgin/s, pgpgout/s, pgmajflt/s | 頁面回收、缺頁中斷 |
-B | 分頁/交換 | pgpgin/s, pgpgout/s, fault/s, majflt/s, pgfree/s, pgscank/s, pgscand/s, pgsteal/s | 換頁活動、OOM 風險 |
-d | 磁碟 I/O (塊設備) | tps, rd_sec/s, wr_sec/s, avgrq-sz, avgqu-sz, await, svctm, %util | 磁碟瓶頸、延遲分析 |
-n DEV | 網絡介面流量 | rxpck/s, txpck/s, rxkB/s, txkB/s, rxcmp/s, txcmp/s, rxmcst/s | 帶寬利用率、封包率 |
-n EDEV | 網絡錯誤 | rxerr/s, txerr/s, coll/s, rxdrop/s, txdrop/s, txcarr/s, rxfram/s | 網卡/驅動故障排查 |
-q | 運行佇列/負載 | runq-sz, plist-sz, ldavg-1/5/15, blocked | 負載高、進程阻塞分析 |
-v | 內核表狀態 | dentunus, file-nr, inode-nr, pty-nr | 文件句柄/Inode 耗盡 |
-w | 上下文切換/進程創建 | cswch/s, proc/s | 高併發、線程風暴 |
-A | 所有報告匯總 | 以上所有 | 全景快照、歸檔 |
# 每 10 秒採集 6 次
sar -u 10 6
# 輸出解讀
09:00:01 CPU %user %nice %system %iowait %steal %idle
09:00:11 all 12.5 0.0 3.2 65.1 0.0 19.2
09:00:21 all 15.3 0.0 4.1 60.2 0.0 20.4
Average: all 14.1 0.0 3.8 62.3 0.0 19.8
# 診斷:%iowait 平均 62% → 明顯磁碟 I/O 瓶頸
# 接著用 sar -d 定位具體磁碟
sar -d -p 10 6 # -p 顯示設備名稱
# 關鍵指標
# tps: 每秒傳輸請求數 (IOPS)
# rd_sec/s, wr_sec/s: 讀寫扇區數/秒
# avgrq-sz: 平均請求大小 (扇區)
# avgqu-sz: 平均佇列長度
# await: 平均等待時間 (ms) = 佇列時間 + 服務時間
# svctm: 平均服務時間 (ms) - 設備本身處理時間
# %util: 設備帶寬利用率 (接近 100% 表示飽和)
# 判斷邏輯:
# await >> svctm → 請求在佇列等待久 → 併發過高或佇列調度問題
# svctm 高 → 設備本身慢 (HDD vs SSD、RAID 降級、固件問題)
# %util 100% + await 高 → 設備飽和,需擴容或優化應用訪問模式
sar -r 10 6
# 關注 %memused, kbcommit, %commit
# %commit > 100% 表示內存過度提交,風險極高
sar -B 10 6
# 關注 pgscank/s (kswapd 掃描), pgscand/s (直接回收掃描), pgsteal/s (回收頁面)
# pgscand/s 持續 > 0 → 進程直接回收內存 → 明顯內存壓力
# majflt/s (主要缺頁) 高 → 應用啟動/大文件讀取、內存不足換頁
sar -n DEV 10 6
# rxkB/s, txkB/s 對比網卡帶寬 (如 1Gbps = 125MB/s)
# rxdrop/s, txdrop/s > 0 → 環形緩衝區太小 (ethtool -G 設置 rx/tx ring)
# rxerr/s, txerr/s > 0 → 物理線路/光模塊/驅動問題
sar -n EDEV 10 6 # 詳細錯誤計數器
# 查看昨天 (saDD 格式) CPU 報告
sar -u -f /var/log/sa/sa$(date -d yesterday +%d)
# 查看指定時間段
sar -u -f /var/log/sa/sa15 -s 14:00:00 -e 15:00:00
# 導出 CSV 供 Excel/圖表分析
sar -u -f /var/log/sa/sa15 | sed 's/ */,/g' > cpu_20231015.csv
java -jar ksar.jar -input /var/log/sa/sa15 -outputDir ./graphs 自動生成 CPU/磁碟/網絡/內存趨勢圖。collector.sar 可直接採集 sar 兼容指標,構建實時監控大盤。sadf -d /var/log/sa/sa15 -- -u 輸出 CSV/JSON/XML,便於自動化分析管道。| 坑點 | 後果 | 規避 |
|---|---|---|
| 未啟用 sysstat 服務 | 無歷史數據,只能即時採集 | systemctl enable --now sysstat |
| 採集間隔過長 (預設 10 分鐘) | 錯過短時尖峰 | 修改 cron 為 1 分鐘:*/1 * * * * root /usr/lib64/sa/sa1 1 1 |
| 磁碟統計未啟用 (SA1_OPTIONS) | sar -d 無數據 | SA1_OPTIONS="-S DISK" |
| 虛擬機 %steal 高誤判為 CPU 不足 | 錯誤擴容 | 關注 %steal,聯繫雲廠商或調整實例規格 |
| %util 100% 但 SSD 實際未滿 | 誤判瓶頸 | NVMe/SSD 併發高時 %util 易達 100%,結合 await/avgrq-sz 綜合判斷 |
sar 是 Linux 性能診斷的「聽診器」,核心價值在於 歷史數據歸檔 (sadc/sa1/sa2)、多維度標準化指標、零侵入式採集。掌握 -u/-r/-B/-d/-n/-q/-w 核心選項組合、await/svctm/%util 磁碟判斷三角、pgscand/majflt 內存壓力信號、%steal 虛擬化干擾識別,配合 ksar/sadf 圖形化/導出,即可構建從即時排障到趨勢分析的完整性能診斷體系。