主机监控指标解析—CPU篇

90 阅读5分钟

一、 CPU 使用率

这是最基础的指标,反映了 CPU 时间片被不同类型任务占用的比例。理解不同状态的占用是定位问题的关键。

1.1 核心指标详解

命令:top, mpstat -P ALL, sar -u

  • 指标含义
指标名称对应字段 (top)含义详解作用与分析
User%us用户态使用率。应用程序(如 Java, Nginx, Python)代码逻辑消耗的 CPU 时间。如果此值高,说明业务繁忙或程序算法复杂(如正在进行加密、压缩、循环计算)。一般情况下这是“健康”的高负载。
System%sy内核态使用率。操作系统内核执行系统调用(如读写文件、网络包处理、分配内存)消耗的时间。警示信号。正常情况下不应超过 30%。如果过高,说明进程频繁请求系统资源,或驱动程序有 Bug。
IOWait%waIO 等待时间。CPU 空闲,但因为此时有进程在等待磁盘 I/O 完成,CPU 处于“无所事事但不得不等”的状态。瓶颈信号。虽然它计入 CPU 使用率,但根源是磁盘太慢。说明存储子系统是瓶颈。
Idle%id空闲率。CPU 完全无事可做的时间。反映资源是否富余。注意:高 Idle 并不代表系统一定快(可能卡在 I/O)。
Softirq%si软中断。CPU 处理软中断(主要是网络收发包)的时间。网络信号。如果此值单核飙高,通常意味着由于网络流量极大(如 DDoS 攻击或高频 RPC 调用)导致网卡中断处理不过来。
Steal%st被窃取时间。仅在虚拟机中出现,表示宿主机(Hypervisor)把 CPU 时间分给了其他虚拟机,当前 VM 等待物理 CPU 的时间。环境信号。如果此值高,说明你的云服务器所在的物理宿主机“超卖”严重,邻居在抢资源。

作用:快速定位是业务代码慢(User)、系统开销大(Sys)、磁盘慢(IOWait)还是底层宿主机慢(Steal)。

1.2 警报与判断

  • 警报阈值

    • 警告 (Warning) :单核或总使用率 > 75%
    • 严重 (Critical) :单核或总使用率 > 90%
    • 异常 (System)%sy > 30% 或 %wa > 20%
  • 典型场景

    • User 高:程序死循环、复杂的序列化/反序列化、机器学习计算。
    • Sys 高:频繁的线程创建/销毁、过多的上下文切换、糟糕的锁竞争。
    • IOWait 高:数据库全表扫描、日志写入过快、磁盘故障。

二、 平均负载

Load Average 是衡量系统“繁忙程度”的趋势指标,它和 CPU 使用率不同,它包含正在运行等待运行(含等待磁盘)的任务。

2.1 核心指标详解

命令:uptime, top, w

  • 指标含义
指标名称含义详解作用与分析
Load 1/5/15分别代表过去 1分钟、5分钟、15分钟的平均负载。即:运行队列中(Running)+ 不可中断睡眠中(Uninterruptible Sleep/Disk Wait)的进程数平均值。判断趋势。如果不看核数,Load 没有任何意义。标准线 = CPU 逻辑核数。Load < 核数:系统空闲。Load > 核数:系统过载,任务需要排队。

2.2 警报与判断

  • 警报阈值

    • Load (15min) > CPU核数 * 0.7 (作为预警)。
    • Load (1min) > CPU核数 * 1.5 (说明爆发性拥堵)。
  • 场景分析

    • Load 高,CPU User 高:计算密集型任务堆积,CPU 确实不够用了。
    • Load 高,CPU Idle 高 (关键) :这是由于大量进程处于 D 状态(Disk Sleep),通常是因为磁盘 I/O 极其缓慢或 NFS 挂死,导致进程卡在队列里算作 Load,但 CPU 其实是闲着的。

三、 上下文切换与中断 (Context Switches)

CPU 在不同进程/线程之间切换是需要成本的(保存寄存器、刷新缓存等)。

3.1 指标详解

命令:vmstat 1, pidstat -w

指标名称对应字段含义详解作用与分析
cssystem -> cs上下文切换总数。每秒 CPU 切换任务的次数。数值取决于业务类型。如果 cs 飙升到几十万/秒,且 CPU %sy 升高,说明程序并发设计不合理(如频繁唤醒线程)。
cswchpidstat -> cswch自愿上下文切换。进程因为等待资源(如 IO、锁)而主动让出 CPU。说明进程资源不足(如等待数据库返回、等待读盘)。
nvcswchpidstat -> nvcswch非自愿上下文切换。进程时间片用完,被系统强制调度走。CPU 瓶颈实锤。说明争抢 CPU 的进程太多,都在排队抢时间片。
insystem -> in中断次数。每秒硬件中断的次数。正常情况会波动。如果异常飙高,检查网卡流量或 USB 等外设驱动。

四、 运行队列 (Process Queue)

这是最直接反映 CPU 是否“排队”的指标。

4.1 指标详解

命令:vmstat 1

指标名称对应字段含义详解作用与分析
r (Running)procs -> r就绪队列长度。正在运行或等待 CPU 时间片的进程数量。判定饱和度的金标准。如果 r 持续大于 CPU 核数,说明 CPU 资源完全不够分,系统严重卡顿。
b (Blocked)procs -> b阻塞队列长度。处于不可中断睡眠(等待 I/O)的进程数量。如果 b 值高,不要查 CPU,去查磁盘或网络存储(NFS/iSCSI)。

五、 总结与排查速查表

现象可能原因建议排查工具解决思路
User 高,Load 高业务代码计算量大,死循环top (按 P 排序), perf优化代码算法,扩容 CPU,分析 Java 线程栈。
Sys 高,Context Switch 高线程切换频繁,锁竞争激烈pidstat -w, vmstat检查程序并发模型,是否线程池设置过大,减少不必要的系统调用。
Load 高,CPU 使用率低磁盘 I/O 阻塞 (D状态进程)iotop, dmesg检查磁盘读写延迟,检查 NFS/存储挂载情况。
Softirq (si) 高网络包量过大 (PPS高)ethtool, nicstat, sar -n DEV检查是否遭受攻击,开启网卡多队列,优化网络内核参数。
Steal (st) 高宿主机超卖,邻居抢资源无(需联系云厂商)迁移实例,或者扩容。
Wait (wa) 高内存不足导致频繁 Swapfree -h, vmstat注意关联:内存不足引起 Swap 换入换出,会直接体现为 CPU 的 IOWait 升高。优先解决内存问题。