Linux CPU 告警排查

现象

监控在业务高峰期持续触发 CPU 告警,top 看到 CPU 使用率很高,甚至达到 100% 以上。部分机器告警明显,但同一业务下其他机器没有告警。

常见影响:

  • 服务响应变慢。
  • 业务高峰期告警频繁。
  • 容量评估不准确。
  • 容易误判为应用异常或流量攻击。

环境

  • 系统:Linux
  • 组件:业务服务、监控系统
  • 常用命令:top, mpstat, mpstat -P ALL

排查过程

  1. 先用 top 看实时 CPU 占用,确认是整体 CPU 高,还是某个进程异常。
top
  1. 查看 CPU 细分指标,判断 CPU 时间主要消耗在哪里。
mpstat 2 5

重点看这些字段:

字段含义排查方向
%usr用户态 CPU 占比应用计算、业务逻辑、压测流量
%sys内核态 CPU 占比系统调用、网络、文件 IO
%iowait等待 IO 的 CPU 占比磁盘或网络 IO 瓶颈
%idle空闲 CPU 占比越低说明越忙
%steal虚拟化环境被宿主机抢占的时间云主机资源争抢
  1. 查看每个 CPU 核心的负载,判断是否单核打满。
mpstat -P ALL 2 5
  1. 对比不同机器的 CPU 核心数和规格。
lscpu
nproc

如果只有部分机器告警,要重点比较机器规格、流量分配、实例数量和部署角色。

根因

常见根因包括:

  • 告警机器规格较低,比如只有 2 核,而其他机器是 16 核。
  • 业务流量分配不均,少数机器承担更多请求。
  • 应用线程或进程绑定导致单核压力高。
  • 程序进入异常循环,持续消耗 CPU。
  • IO 等待、虚拟化抢占等问题被误认为单纯 CPU 不足。

在原始记录中,CPU 告警的关键发现是:告警机器 CPU 核心数比其他机器少,高峰期承接流量时更容易触发 CPU 告警。

解决方法

确认是否规格不一致

lscpu
nproc
mpstat -P ALL 2 5

如果发现告警机器核心数明显更少,优先处理容量和调度问题:

  • 调整负载均衡权重。
  • 将低规格机器移出高峰流量池。
  • 扩容机器规格。
  • 增加同规格实例。

确认是否进程异常

top
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head

如果某个进程 CPU 异常高,再继续看线程级别。

top -H -p <pid>

确认是否 IO 等待

mpstat 2 5
iostat -x 2 5

如果 %iowait 很高,CPU 告警可能只是表象,根因更可能在磁盘 IO 或网络 IO。

验证结果

mpstat 2 5
mpstat -P ALL 2 5
top

确认点:

  • CPU 告警恢复或明显下降。
  • 高峰期 %idle 不再长期接近 0。
  • 不同机器负载更均衡。
  • 服务响应时间恢复正常。

预防措施

  • 同一服务池尽量保持机器规格一致。
  • 负载均衡权重要和机器规格匹配。
  • 监控里同时看 CPU 使用率、核心数、负载、QPS 和响应时间。
  • 高峰期前做容量评估,不只看平均 CPU。
  • 对单核打满、IO wait 高、steal 高分别设置排查路径。

相关笔记