Linux sar 工具收集与分析方法

1次阅读

直接运行 sar -u 1 5 可实时采样 cpu 使用率,输出 %user、%system、%idle 等指标;不加参数则读取历史数据而非实时状态。

Linux sar 工具收集与分析方法

如何用 sar 实时看 CPU 使用率

直接运行 sar -u 1 5 就能每秒采样一次、共 5 次,输出用户态(%user)、内核态(%system)、空闲(%idle)等关键指标。注意默认单位是百分比,不是毫秒或 ticks。

常见错误是只跑一次 sar -u 不带参数——它会查历史数据(来自 /var/log/sysstat/),而非当前实时状态;想看“现在”,必须加时间间隔和次数。

  • sar -u ALL 1 3 可展开显示软中断(%soft)、硬中断(%irq),排查中断风暴时有用
  • 如果看到 %idle 长期接近 0,但 %iowait 很高,说明不是 CPU 瓶颈,而是磁盘响应慢
  • 某些容器环境或低权限账户下,%steal 值异常高(>10%),大概率是宿主机资源超卖

sar 查内存是否真缺页

sar -r 显示的是物理内存使用概况(%memusedkbmemfree),但它不等于“内存不够”。真正反映压力的是 sar -B 的分页活动:重点关注 pgpgin/pgpgout(每秒换入/换出页数)和 pgmajfault(每秒主缺页次数)。

主缺页(pgmajfault)高才说明进程在频繁从磁盘加载代码或数据段;若该值持续 >100/s,配合 free -h 发现可用内存

  • sar -r 2 10sar -B 2 10 最好同时跑,避免时间错位导致误判
  • kbmemused 接近总量 ≠ 内存瓶颈:linux 会把空闲内存用于 page cache,MemAvailable(见 /proc/meminfo)才是更准的可分配量
  • sar -r 不显示 swap 使用细节,要查 sar -S%swpused)和 sar -Wpswpin/pswpout

磁盘 I/O 数据里哪个字段最值得盯

别只看 sar -d%util。这个值是设备忙时占比,对 NVMe 或多队列 SSD 来说,80% util 可能完全正常;而对单盘 SATA,>60% 就可能排队了。更可靠的指标是 await(I/O 平均等待毫秒数)和 svctm(实际服务时间)——如果 await >> svctm,说明请求在队列里着。

注意 sar -d 默认不显示设备名全称(如 nvme0n1p1),需加 -P ALL 参数才能区分多盘,否则所有数据会混成一个 DEV 行。

  • sar -d -p 1 5-p 启用可读设备名)避免认错盘
  • rkB/swkB/s 是吞吐量,rrqm/swrqm/s 是合并请求数,后者高说明 I/O 聚合做得好
  • 如果 await 突增但 %util 不高,可能是应用层小 IO 密集(如数据库随机读),而非磁盘硬件瓶颈

为什么 sar 历史数据突然没了

因为 sar 本身不采集,它只读取 sysstat 服务记录的日志,默认路径是 /var/log/sysstat/saXX(XX 是日期)。如果 sysstat 没启用、crond 任务被禁、或磁盘满导致写入失败,历史就为空。

检查三件事:systemctl is-active sysstatls -l /var/log/sysstat/sa*df -h /var/log。另外,/etc/cron.d/sysstat 里定义的采集频率(通常是每 10 分钟)和保留天数(/etc/sysconfig/sysstathistory)直接影响你能回溯多久。

  • 刚装完 sysstat,需手动执行 sadf -d /var/log/sysstat/sa$(date +%d) | head 确认有数据生成
  • sar -f /var/log/sysstat/sa15 可指定某天文件,但 sa 文件是二进制,不能用 cat 直接看
  • 如果业务要求秒级精度,sysstat 默认 10 分钟太粗,需改 /etc/cron.d/sysstat 并重启服务,但会增大磁盘压力

历史数据依赖 cron 和磁盘空间,这两点最容易被忽略,一出问题就只能看实时,没法对比趋势。

text=ZqhQzanResources