分析长期CPU利用率周期需依赖sysstat自动保存的历史数据,确认服务激活后,用sar -u -f指定saXX文件读取,结合时间范围、阈值筛选和多日对比,并交叉验证iowait、内存、单核负载等指标定位真实瓶颈。

要分析长期 CPU 利用率周期,关键不是“多跑几次 sar -u”,而是依赖系统自动保存的历史采样数据——这些数据才是反映数天、数周趋势的可靠依据。
确认 sysstat 服务已启用并持续记录
历史数据不会自动产生。必须确保 sysstat 服务处于激活状态:
- 运行 systemctl is-active sysstat,返回 active 才表示正在记录
- 若为 inactive,执行 sudo systemctl enable --now sysstat 启用并启动
- 默认每 10 分钟采集一次,日志存于 /var/log/sa/saXX(XX 是当月日期,如今天是 25 日,文件就是 sa25)
- 检查是否存在历史文件:ls -l /var/log/sa/sa[0-9][0-9]
按日期读取指定 CPU 历史数据
不能用 sar -u 22 这类写法——它会被当成“每 22 秒采一次”,和日期无关。正确方式是用 -f 显式指定归档路径:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 查 9 月 20 日的 CPU 数据:sar -u -f /var/log/sa/sa20
- 若文件被压缩(如 sa20.gz),先解压再读:zcat /var/log/sa/sa20.gz | sar -u -f -
- 加 -u ALL 可显示 %irq、%soft、%guest 等细分项,有助于识别中断或虚拟化开销
跨多日提取趋势并定位异常时段
单日数据只能看局部,周期分析需横向对比。常用组合操作:
- 限定时间范围:查 20 日上午 9–11 点:sar -u -f /var/log/sa/sa20 -s 09:00:00 -e 11:00:00
- 快速筛出高负载时刻:比如找 %idle < 10 的行:sar -u -f /var/log/sa/sa20 | awk '$6 < 10 {print}'
- 对比连续多日同一时段:写个简单循环,例如输出每天 14:00 的 %idle:for d in 18 19 20 21; do echo "Sep $d:"; sar -u -f /var/log/sa/sa$d | awk '/14:[0-5][0-9]:[0-5][0-9]/ {print $6}'; done
结合其他指标交叉验证真实瓶颈
CPU 利用率数字本身容易误导。长期高 %user 不一定代表过载,而 %iowait 持续 >25% 或 %soft 突增往往更危险:
- 查磁盘压力:sar -d -f /var/log/sa/sa20,关注 await 和 %util
- 查内存与换页:sar -r -f /var/log/sa/sa20 和 sar -B -f /var/log/sa/sa20,观察是否频繁 swap
- 查单核热点:sar -P ALL -f /var/log/sa/sa20,避免被整体平均值掩盖某核 100% 占用
- 注意 D 状态进程:ps aux | grep ' D ',此时 %idle 可能很高,但系统实际已卡死

















