温馨提示×

CPUstat在CentOS故障排查中的应用

小樊
37
2026-01-08 04:07:45
栏目: 智能运维

工具选择与安装

  • 在 CentOS 环境中,cpustat 通常指 sysstat 套件中的命令行工具,用于按间隔采样并展示系统级 CPU 利用率与负载,适合快速定位 CPU 相关瓶颈。安装方式如下:
    • CentOS 7 及更早:sudo yum install sysstat
    • CentOS 8 及以上:sudo dnf install sysstat
  • 若你指的是 Uber 开源的 github.com/uber-common/cpustat(Go 实现),需先准备 Go 环境,再通过 go get 安装,用法与 sysstat 的 cpustat 不同。本文以 sysstat 的 cpustat 为主。

快速上手与常用命令

  • 实时查看整体 CPU:直接执行 cpustat,观察整体 %user、%system、%idle、%iowait 等关键列,快速判断是否存在高占用或 I/O 等待。
  • 每核明细与持续刷新:使用 cpustat -p ALL -i 1(每秒刷新、显示所有 CPU 核心),便于发现单核打满、核间不均衡等问题。
  • 宽格式更易读:加上 -w 获得更宽的列宽输出,配合 -p ALL -i 2 每 2 秒刷新一次,适合现场排查。
  • 采样并保存用于复盘:例如 cpustat -o cpu_usage.csv 1 10 > cpu_usage.csv(每秒 1 次、共 10 次,导出 CSV),便于后续分析或留档。

故障排查流程与判读要点

  • 判定是否过载:先看整体 %idle 是否长期接近 0%;若持续偏低,说明 CPU 资源紧张。
  • 区分用户态与内核态:
    • %user 高:应用计算密集或代码效率低,优先优化应用或横向扩容。
    • %system 高:内核/驱动/中断/上下文切换频繁,需进一步查内核与中断来源。
  • 识别 I/O 瓶颈:%iowait 高 表示 CPU 大量时间在等 I/O,应结合 iostat 检查磁盘/存储子系统。
  • 检查中断与虚拟化开销:hi(硬件中断)/si(软件中断) 持续偏高,定位对应设备/驱动;在虚拟化环境关注 %steal,过高说明宿主机资源争用。
  • 发现核间不均:使用 -p ALL 观察是否某颗 CPU 长期显著高于其他核,考虑中断亲和性、进程亲和性(如 taskset)与调度策略优化。

自动化监控与告警

  • 简单周期采样:编写脚本周期性调用 cpustat 并追加到日志,例如每分钟记录一次;示例脚本与 cron 配置可参考如下思路:
    • 脚本要点:调用 cpustat -c 1 1 获取一次采样,并附加时间戳写入 /var/log/cpu_usage.log
    • 定时任务:在 crontab -e 中加入如 " * * * * /usr/local/bin/monitor_cpu.sh"* 实现每分钟采集。
  • 阈值告警:在脚本中解析 cpustat 输出,当 %idle 过低或 %iowait 过高时触发邮件/企业微信/钉钉告警(需预先配置 mail 或 webhook)。
  • 长期趋势与容量规划:持续采样并归档(CSV/日志),对比不同时段曲线,支撑扩缩容与内核/应用参数优化决策。

与 top、vmstat、iostat、perf 的协同

  • 快速定位“哪个进程”最耗 CPU:先用 top/htop 按 CPU 排序,锁定 PID/命令;再回到 cpustat 观察整体与每核负载是否异常。
  • 关联内存与调度:用 vmstat 检查 si/so(换入/换出) 与运行队列,判断是否存在内存压力导致的 CPU 抖动。
  • 验证 I/O 瓶颈:当 %iowait 偏高时,用 iostat -x 1 查看磁盘 await、svctm、util,确认是否为存储子系统问题。
  • 内核热点与调用栈:若 %system 高且难以定位,使用 perf top/record/report 做热点函数与调用路径分析,结合 cpustat 的宏观结论做微观验证。

0