做什么

一行综合 CPU / 内存 / IO / swap 的状态——**排查"为什么卡"**的常用第一步。

实战

vmstat 1                            # 每秒采样
vmstat 1 5                          # 每秒一次,共 5 次
vmstat -S M 1                       # 内存用 MB
vmstat -d                           # 各磁盘 IO
vmstat -s                           # 综合统计

输出列

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 5000000 100000 1500000   0    0    20    50  100  200  5  2 92  1  0
含义
r 等运行的进程数 ★
b 阻塞中的进程数
swpd 用的 swap 量
free 空闲内存
buff cache 缓存
si so swap in/out(> 0 说明在 swap
bi bo 块设备读写(块/秒)
in 中断/秒
cs 上下文切换/秒
us sy id wa st CPU 用户 / 内核 / 空闲 / IO 等待 / 偷取

关键阈值

何时担心
r > CPU 核数 → CPU 跑不过来
b 持续 > 0 → 进程在等 IO / 锁
si/so > 0 → 内存吃紧到 swap 了
wa > 20% → 磁盘 IO 瓶颈
st > 1% → 虚拟机被偷 CPU(云上邻居打架)

实战:性能问题排查

vmstat 1
# 持续观察 30 秒

# 看到:
# r 持续 > 核数  → CPU 不够
# wa 持续高     → 磁盘慢 / IO 瓶颈
# si/so 持续    → 内存不够(在 swap)
# cs 异常高     → 上下文切换过多(线程太多 / 锁竞争)

配合其他工具

vmstat 1    +    top / htop   # 进程视角
vmstat 1    +    iostat -x 1  # 磁盘细节
vmstat 1    +    sar          # 历史数据

  • 第一行是自开机以来平均,不准——看第二行起
  • wa 高不一定是磁盘问题——可能是NFS / iSCSI 等远端 IO
  • 现代 SSD 时代 bi/bo 数字大很正常——结合 iostat 看延迟