vmstat 是观察系统整体进程队列最直接的工具,关键看 procs 分组下的 r(运行/就绪进程数)和 b(不可中断睡眠进程数):r > cpu 核数预示 cpu 瓶颈,b 持续 ≥ 1~2 且伴 wa 或 si/so 升高则指向 i/o 或内存换页阻塞;需结合周期采样(如 vmstat 1)与 us/sy/wa/si/so 等字段交叉验证瓶颈类型。

vmstat 是观察系统整体进程队列最直接的工具之一,关键在于看 procs 分组下的 r(运行队列中的进程数)和 b(不可中断睡眠进程数)这两个字段。
一、r 字段:判断 CPU 调度压力的核心指标
r 表示当前时刻等待 CPU 运行或正在运行的进程数量(即就绪态 + 运行态)。它反映的是调度器队列长度:
-
r ≈ 0:CPU 基本空闲,无排队 r :通常正常,有轻微排队但可消化-
r > CPU 核数:说明有进程在排队等 CPU,存在潜在 CPU 瓶颈 -
r 持续 ≥ 2×CPU 核数:高负载信号,需进一步排查是哪个进程占 CPU(用top -H或pidstat -u 1)
✅ 示例:4 核机器上
r长期维持在 8~12,基本可判定 CPU 不足;若r突然跳到 30+(如文章开头提到的“负载四十多”),大概率是大量进程卡在就绪态,等待调度。
二、b 字段:识别 I/O 或内存阻塞的辅助线索
b 表示处于不可中断睡眠状态(D 状态)的进程数,通常是等待磁盘 I/O、swap 页面加载、NFS 响应等底层资源:
-
b == 0:理想状态,无硬阻塞 -
b > 0:存在进程被内核挂起,无法被信号中断 -
b 持续 ≥ 1~2:值得警惕,尤其当wa(I/O 等待)也同步升高时,指向磁盘或存储层问题 -
b 高 + r 低:典型 I/O 卡顿特征——进程不争 CPU,但在等设备,此时top可能显示低 CPU 使用率,但系统响应迟缓
⚠️ 注意:
b不是“坏指标”,短时出现(如一次大写入)属正常;但持续存在,尤其是伴随si/so > 0或bi/bo 突增,就要查 I/O 栈(iostat -x 1、iotop)或内存是否触发 swap。
三、配合时间采样,看清队列动态趋势
单次 vmstat 输出意义有限,必须用带间隔的周期采样才能捕捉队列变化:
-
vmstat 1:每秒刷新,适合快速抓异常波动(Ctrl+C 停止) -
vmstat 2 10:每 2 秒一次,共 10 行,便于复制分析 -
vmstat -w -t 1 > vmstat.log &:宽格式 + 时间戳,后台记录供回溯
? 关键技巧:观察
r和b的连续多行变化模式。比如:
r在 0→1→0→5→12→8→… 来回剧烈跳动 → 可能是突发批处理任务r稳定在 6,b稳定在 3 → 系统长期处于混合瓶颈(CPU + I/O 并存)
四、别只盯 r 和 b,要结合上下文交叉验证
进程队列不是孤立现象,需联动其他字段缩小范围:
- 若
r高 +us/sy高 → 用户或内核态代码密集型负载(查top或perf top) - 若
r高 +wa高 → CPU 等待 I/O,但b可能不高(因部分 I/O 等待走可中断路径) - 若
r低 +b高 +si/so > 0→ 内存严重不足,进程卡在换页路径上 - 若
r和b都高 → 多重资源争用,常见于内存吃紧 + 磁盘慢 + 应用并发高场景
不复杂但容易忽略











