sar 查看历史性能数据:事后追溯的依据
发布时间:2026-04-17 21:08       
更新时间:2026-04-18 20:41
问题发生在凌晨,早上上班才处理,手里却没有任何当场的监控数据——sar 就是为这种局面准备的。它是 sysstat 包的一部分,开启后由系统定时采集指标,默认保留一周以上,随时回看。
## 第一步:安装并开启采集
```
sudo yum install sysstat && sudo systemctl enable --now sysstat # CentOS
sudo apt install sysstat # Ubuntu
```
Ubuntu 装完还要确认开关:编辑 /etc/default/sysstat,把 ENABLED 改为 true,再 systemctl restart sysstat。等几分钟,sar -u 能出数据即部署成功。数据落在 /var/log/sa/ 目录,sa 后跟日期的就是当日文件,单文件只有几十 KB,常年开着也占不了多少空间。跨天的问题,先用 ls /var/log/sa/ 确认历史文件在不在,文件名就是日期。
## 第二步:看当天的 CPU
```
sar -u # 当天全天 CPU
sar -u -s 02:00:00 -e 04:00:00 # 只看 2 点到 4 点
sar -q # 负载与进程队列
```
%iowait 列高,说明凌晨的问题大概率在磁盘;%user 高则先查哪个业务在夜里跑批,对照 crontab 里的定时任务清单,能直接锁定嫌疑人。sar 也有实时模式,sar -u 1 3 每秒采一次共三次,当作即时查看用。实时与历史两种模式参数相同,差别只在有没有 -f,一组命令两用。
## 第三步:看昨天的网卡流量
```
sar -n DEV -f /var/log/sa/sa22 # 读 22 日的历史文件
```
DEV 视图列出每块网卡的收发速率,逐列看 rxpck/s、rxkB/s,带宽是否被打满、异常流量出现在几点,都有答案。不带 -f 就是看今天;排查 TCP 层问题再加 sar -n TCP,看活跃连接数的变化曲线。tcp 视图里的 active/s、passive/s 分别对应主动与被动建连,能看出连接是业务正常产生还是异常扫描。
## 第四步:其他常用视图
sar -d 看磁盘活动,sar -r 看内存,sar -B 看缺页与换页。排查思路固定:先用 -u 定出时间窗,再按嫌疑方向选磁盘、内存或网络视图收窄范围。
提醒一句:保留期由 /etc/sysstat/sysstat 里的 HISTORY 配置决定,写成 HISTORY=28 即保留四周。机器没开 sar 的话,事后只能靠业务日志的时间戳反推,窗口就窄多了,重要机器建议把这项采集当默认配置,采集频率默认十分钟一次,回溯定位够用,不必调密。