vmstat是linux虚拟内存监控核心工具,通过swpd、free、si、so等字段可快速定位内存压力:swpd>0且持续增长、si/so同步>0表明内存紧张;free低但si/so≈0属正常;-s m单位更直观;第一行为历史均值,需关注后续实时行。

直接用 vmstat 就能快速查看虚拟内存状态,关键不是“能不能看”,而是“怎么看懂、怎么定位问题”。
vmstat 输出中和虚拟内存直接相关的核心字段
-
swpd:当前被换出到 swap 分区的内存大小(单位 KB)。值大于 0 表示系统已启用交换,持续增长说明物理内存紧张。 -
free:完全空闲的物理内存(KB),注意它通常偏低——Linux 会尽量利用空闲内存做 cache/buff,低 free 不等于内存不足。 -
buff和cache:分别表示用于块设备缓冲和文件缓存的内存(KB)。它们可被内核快速回收,属于“可用内存”的一部分。 -
si(swap-in):每秒从磁盘 swap 区读入内存的数据量(KB/s)。 -
so(swap-out):每秒写入磁盘 swap 区的数据量(KB/s)。
✅si和so同时持续 > 0(尤其so频繁),是内存压力最明确的信号——内核正在主动腾挪内存。
常用监控方式与对应场景
查看当前瞬时快照(自启动平均值):
vmstat
适合快速摸底,但第一行是历史均值,不能反映实时压力。每 2 秒刷新一次,持续观察趋势:
vmstat 2
按 Ctrl+C 停止。重点关注swpd是否上升、si/so是否跳动、free是否持续萎缩。监控 10 次,每次间隔 1 秒,便于记录或脚本处理:
vmstat 1 10
第一行仍是历史均值,从第二行起才是最近 1 秒的实测值。加
-S m以 MB 为单位显示,更易读:vmstat -S m 1
所有内存数值自动转为 MB,避免千位换算干扰判断。
识别虚拟内存异常的典型组合
-
内存吃紧:
-
swpd明显增大 +free持续走低 +si和so同时活跃(> 0) -
r(运行队列)长期高于 CPU 核数,且b(不可中断睡眠)同步升高 → 很可能因缺内存导致进程卡在 page fault 或 swap I/O
-
-
系统颠簸(thrashing):
-
so和si数值剧烈波动(比如几十 MB/s)、wa(IO 等待)飙升至 30% 以上、cs(上下文切换)陡增 → 内核忙于换页,实际有效计算时间极少
-
-
swap 未启用但内存告急:
-
swpd = 0,但free极低、buff/cache也难回收、r高、b高 → 可能是内存泄漏或 slab 泄漏,需配合vmstat -m查看内核对象缓存占用
-
不复杂但容易忽略











