判断物理内存是否紧张,需结合free的available字段(低于总量10%即告警)与vmstat的free、swpd、si/so等动态趋势:free持续低于5%、swpd非零、si/so持续大于0均属危险信号。

vmstat 本身不直接提供“空闲内存阈值”的判断逻辑,它只输出原始内存状态数据;判断是否低于空闲阈值,需要你结合 free 的 available 字段和 vmstat 的 free、buff、cache、swpd、si/so 等字段综合分析。物理内存是否紧张,不能只看 free 列——Linux 会把大量空闲内存用于 buff/cache,这部分在需要时可快速回收,真正关键的是 available(来自 free)和 swpd + si/so 的活跃交换行为。
下面分三步讲清楚怎么用 vmstat 辅助判断物理内存是否逼近危险阈值:
查看实时内存压力信号
运行带间隔的 vmstat,重点关注以下几列的动态趋势:
-
free:持续低于物理内存总量的 5% 且不再回升,是初步预警; -
swpd:非零说明已启用 swap,需立刻关注; -
si和so:若持续大于 0(尤其 >100 KB/s),代表系统频繁换页,内存严重不足; -
r(运行队列):长期 > CPU 核心数,常伴随内存不足导致调度延迟; -
wa(I/O 等待):若同步升高,可能是因 swap I/O 拖慢整体响应。
例如:
vmstat 2 5
观察 5 组数据中 si/so 是否稳定为 0,free 是否逐轮下降,swpd 是否从 0 变为非零。
对比 free -h 获取真实可用内存
vmstat 的 free 是裸空闲值,不含可回收缓存;而 free 命令的 available 才是内核估算的真正可分配给新进程的内存。
执行:
free -h
重点看这一行:
Mem: ... available: 1.2G
- 若
available (如 16GB 内存,available <li>若 <code>available接近 0 且swpd > 0,系统已在临界状态,可能触发 OOM Killer。
✅ 小技巧:
vmstat和free -h配合使用最有效——vmstat看趋势与交换行为,free看瞬时可用底线。
结合 vmstat -a 观察活跃/非活跃页分布
添加 -a 参数可显示 active(活跃)和 inactive(非活跃)内存页:
vmstat -a 2 3
输出中新增两列:
-
active:近期被访问过的内存页,不易回收; -
inactive:较久未用、可被快速释放的页(含可回收缓存)。
如果 inactive 显著减少、active 持续上升、同时 free 不增反降,说明缓存正在被“挤占”,内存资源已实质性紧张。
不复杂但容易忽略


















