Vmstat 内存与 CPU 监控教程

Vmstat(Virtual Memory Statistics)是 Linux 系统中最经典的系统性能监控工具之一。它能够一行输出中同时展示进程、内存、Swap、I/O、系统调度和 CPU 的实时状态,是快速了解搬瓦工 VPS 整体健康状况的首选命令。本教程将详细讲解 vmstat 的各项指标含义和实际应用方法。

一、基本用法

# 显示一次系统概览
vmstat

# 每 2 秒刷新,共 10 次
vmstat 2 10

# 持续监控(每秒刷新)
vmstat 1

# 显示时间戳
vmstat -t 2 5

# 以 MB 为单位显示
vmstat -S M 2 5

# 宽格式输出(更好地对齐列)
vmstat -w 2 5

二、输出字段详解

Vmstat 的输出分为六大类:

2.1 进程(procs)

# procs 列
# r: 运行队列中的进程数(等待 CPU 的进程)
# b: 不可中断睡眠的进程数(通常在等待 I/O)

# 判断标准:
# r > CPU 核心数:CPU 过载
# b > 0 持续出现:可能存在 I/O 瓶颈

2.2 内存(memory)

# memory 列(单位 KB,使用 -S M 可切换为 MB)
# swpd: 已用 Swap 大小
# free: 空闲内存
# buff: 缓冲区内存
# cache: 缓存内存

# 实际可用内存 ≈ free + buff + cache
# swpd 持续增长说明内存不足

2.3 Swap

# swap 列
# si: 每秒从磁盘换入的内存大小(KB/s)
# so: 每秒换出到磁盘的内存大小(KB/s)

# si/so > 0 表示系统正在使用 Swap
# 持续出现大量 si/so 说明物理内存严重不足

2.4 I/O

# io 列
# bi: 每秒从块设备读取的块数
# bo: 每秒写入块设备的块数

# bi/bo 大幅波动可能表示磁盘压力大

2.5 系统(system)

# system 列
# in: 每秒中断次数
# cs: 每秒上下文切换次数

# cs 过高(>数万)可能说明:
# 1. 进程/线程数过多
# 2. 锁竞争严重
# 3. 需要优化应用程序

2.6 CPU

# cpu 列
# us: 用户空间 CPU 时间百分比
# sy: 内核空间 CPU 时间百分比
# id: 空闲 CPU 百分比
# wa: 等待 I/O 的 CPU 百分比
# st: 被虚拟化偷取的 CPU 时间百分比

# 判断标准:
# us + sy > 80%:CPU 压力大
# wa > 20%:I/O 等待严重
# st > 10%:宿主机资源争用严重(VPS 常见)

三、特殊查看模式

# 查看磁盘统计
vmstat -d

# 查看磁盘分区统计
vmstat -p /dev/vda1

# 查看内存统计摘要
vmstat -s

# 查看 Slab 信息
vmstat -m | head -20

# 活跃/非活跃内存统计
vmstat -a 2 5

四、性能问题诊断

4.1 CPU 瓶颈诊断

# CPU 瓶颈特征:
# r 列持续大于 CPU 核心数
# us + sy 接近 100%
# id 接近 0

# 实时监控
vmstat 1 | awk '{
    if (NR > 2) {
        r=$1; us=$13; sy=$14; id=$15;
        if (us+sy > 80) printf "*** CPU 高: us=%s sy=%s id=%s r=%s\n", us, sy, id, r;
        else printf "    CPU 正常: us=%s sy=%s id=%s r=%s\n", us, sy, id, r
    }
}'

4.2 内存瓶颈诊断

# 内存瓶颈特征:
# swpd 持续增长
# si/so 持续大于 0
# free 很低且 buff/cache 也被压缩

vmstat 2 | awk '{
    if (NR > 2) {
        swpd=$3; si=$7; so=$8; free=$4;
        if (si > 0 || so > 0) printf "*** 内存紧张: free=%s swpd=%s si=%s so=%s\n", free, swpd, si, so;
        else printf "    内存正常: free=%s swpd=%s\n", free, swpd
    }
}'

4.3 I/O 瓶颈诊断

# I/O 瓶颈特征:
# b 列持续大于 0
# wa 较高(>20%)
# bi/bo 波动大

vmstat 2 | awk '{
    if (NR > 2) {
        b=$2; wa=$16; bi=$9; bo=$10;
        if (wa > 20) printf "*** I/O 瓶颈: b=%s wa=%s%% bi=%s bo=%s\n", b, wa, bi, bo;
        else printf "    I/O 正常: b=%s wa=%s%% bi=%s bo=%s\n", b, wa, bi, bo
    }
}'

五、监控脚本

#!/bin/bash
# VPS 性能异常告警脚本
LOG="/var/log/vmstat-alert.log"

vmstat 5 | awk -v log="$LOG" '
NR > 2 {
    r=$1; b=$2; swpd=$3; free=$4; si=$7; so=$8;
    us=$13; sy=$14; id=$15; wa=$16; st=$17;

    alert = "";
    if (us+sy > 85) alert = alert "CPU过载 ";
    if (wa > 25) alert = alert "IO等待 ";
    if (si > 100 || so > 100) alert = alert "Swap频繁 ";
    if (r > 4) alert = alert "进程排队 ";
    if (st > 10) alert = alert "CPU被偷取 ";

    if (alert != "") {
        cmd = "date +\"%Y-%m-%d %H:%M:%S\"";
        cmd | getline ts;
        close(cmd);
        printf "[%s] 警告: %s| r=%s b=%s free=%s us=%s wa=%s st=%s\n", ts, alert, r, b, free, us, wa, st >> log
        fflush(log)
    }
}'

六、与其他工具对比

  • vmstat vs top:vmstat 输出更紧凑,适合脚本处理和趋势分析;top 交互性更强,适合查看进程级别信息。
  • vmstat vs free:vmstat 同时展示内存和其他指标;free 专注于内存详情。
  • vmstat vs iostat:vmstat 提供系统整体视图;iostat 提供更详细的设备级磁盘统计。

七、快速诊断流程

# 第一步:快速查看系统状态
vmstat 1 5

# 第二步:根据 vmstat 结果进一步诊断
# CPU 高 → top 查看具体进程
# IO 高 → iostat -xm 查看磁盘详情
# 内存紧张 → free -h 查看内存分配
# st 高 → 联系搬瓦工工单反馈宿主机资源问题

总结

Vmstat 是系统性能快速诊断的瑞士军刀,一条命令即可看到 CPU、内存、I/O、进程的全貌。在搬瓦工 VPS 上遇到性能问题时,vmstat 是你应该运行的第一个命令。建议配合 Iostat 磁盘监控SAR 系统报告Dstat 统计工具 一起使用,全面掌握系统性能状况。选购搬瓦工 VPS 请查看全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 循环折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。