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% 循环折扣。