温馨提示×

CentOS CPUstat性能瓶颈识别技巧

小樊
46
2026-01-08 04:11:52
栏目: 智能运维

CentOS 上使用 cpustat 识别 CPU 性能瓶颈的实用技巧

一 工具选择与安装

  • 在 CentOS 上常见的“cpustat”主要有两类,请先确认你安装的是哪一个,以免命令与输出含义不一致:
    • Uber 的 cpustat(Go 版):侧重按进程/线程汇总 CPU 占用,适合快速找出“谁在吃 CPU”。安装示例:先装 Go,再执行 go get github.com/uber-common/cpustat;常用:sudo cpustat、sudo cpustat -p 。输出包含 %usr、%sys、%idle、iowait、hi、si、st 等字段。
    • sysstat 套件中的 cpustat:与 sar/mpstat 同源,侧重系统级 CPU 时间分布与历史统计。安装:sudo yum install -y sysstat;常用:cpustat、cpustat -o cpu_usage.csv 1 10(每秒一次、共 10 次,导出 CSV 便于复盘)。

二 快速判别瓶颈的信号

  • 使用 Uber 版 cpustat 观察整体:
    • %usr 或 %sys 持续很高、%idle 很低:CPU 计算/内核消耗成为主因;若 %sys 偏高,常见于系统调用密集、驱动/内核路径繁忙。
    • iowait(或 wa)高:CPU 大量时间在等 I/O,磁盘/存储往往是根因,应联动 I/O 工具进一步确认。
    • hi/si 高:硬件/软件中断风暴,可能来自网卡、存储或定时器等;需结合中断与软中断分布定位来源。
    • 单核长期打满、其他核空闲:线程/进程未充分并行或存在锁争用,需做亲和性与并发度优化。
  • 使用 sysstat 版 cpustat 或结合 mpstat/vmstat 校验:
    • %idle 低且 %sys 高:偏向内核态瓶颈(系统调用、锁、页分配、中断等)。
    • 运行队列(vmstat 的 r)长期大于逻辑 CPU 数:CPU 饱和,任务排队等待。
    • 上下文切换(vmstat 的 cs)与中断(in)异常高:调度/中断过于频繁,常见于线程过多或中断集中。

三 高效排查流程

  1. 全局快检:运行 cpustat(Uber 版)观察数轮输出,先看 %idle、%usr、%sys、iowait、hi/si 的走向与峰值分布。
  2. 定位“谁”在耗 CPU:
    • cpustat -p 聚焦问题进程;或用 top/htop 按 CPU 排序确认 Top-N 进程。
  3. 判断瓶颈类型:
    • iowait 高:转用 iostat -x 1 查看磁盘 util%、await、svctm、r/s、w/s,确认是否为存储瓶颈。
    • %sys 高:用 vmstat 1 看 r、cs、si,用 mpstat -P ALL 1 看各核是否均衡,必要时结合 pidstat -w 区分自愿/非自愿上下文切换。
    • hi/si 高:查看 /proc/interrupts、/proc/softirqs 按 CPU 与类型定位来源(如 NET_RX/TIMER 等)。
  4. 复核负载与并行度:
    • 用 uptime 看 load average 与逻辑 CPU 数的关系;若负载高于核数且 r 高,说明 CPU 饱和。
    • 检查是否单核长期高占用,考虑调整线程池/并发、绑定 CPU 亲和性(taskset)、优化锁与热点路径。
  5. 留存证据与复盘:
    • 用 sysstat 版 cpustat 导出 CSV(如 -o cpu_usage.csv 1 60),便于画图与回溯;必要时配合 sar 查看历史。

四 常用命令速查表

场景 命令示例 关注点
安装 Uber 版 cpustat sudo yum install -y golang && go get github.com/uber-common/cpustat 安装 Go 后获取工具
实时监控(Uber) sudo cpustat 快速扫全局:%usr、%sys、%idle、iowait、hi、si
按进程查看(Uber) sudo cpustat -p 定位具体进程/线程
安装 sysstat 版 cpustat sudo yum install -y sysstat 系统级统计与历史
采样并导出 CSV cpustat -o cpu_usage.csv 1 60 便于分析与复盘
每核使用率 mpstat -P ALL 1 发现单核打满/不均衡
运行队列与上下文切换 vmstat 1 r、cs、si、b 等
磁盘 I/O 佐证 iostat -x 1 %util、await、svctm、r/s、w/s
历史回看 sar -f /var/log/sysstat/saXX 回放当天或指定日期数据

五 易错点与优化建议

  • 不要把 CPU 利用率平均负载 混为一谈:load average 是平均活跃任务数,需结合 逻辑 CPU 数r 队列判断饱和。
  • iowait 高 ≠ 磁盘一定慢:也可能是文件系统、驱动或队列策略问题;务必用 iostat 交叉验证。
  • %sys 高 常见于系统调用风暴、锁竞争、页分配/回收频繁;结合 mpstat/vmstat/pidstat 细化到调用路径与线程。
  • hi/si 高 需按 CPU 与软中断类型定位(如网络收包 NET_RX);必要时调整驱动/中断亲和性或优化网络栈。
  • 单核长期高占用 多为并行度不足或热点锁;考虑增加并发、减少锁争用、使用 CPU 亲和性与绑核策略。
  • 做长期观测时,优先使用 sysstat 版 cpustat 导出 CSVsar 做趋势分析,避免仅凭瞬时截图下结论。

0