直接看si、so和wa三个字段,再结合r与free就能快速判断内存过载是否拖慢系统响应:si>0且持续非零、so>0且连续≥3次>100kb/s、wa>15%~20%并伴随bi/bo上升,表明内存不足引发swap频繁i/o,导致进程等待卡顿。

直接看 si、so 和 wa 这三个字段,再结合 r 与 free 就能快速判断内存过载是否正在拖慢系统响应。
盯住交换活动(si/so)是否持续发生
内存真正过载时,内核会把不活跃页写入 swap,同时在需要时再读回——这个过程非常耗时。vmstat 中:
- si > 0 且稳定大于 0:说明系统正频繁从磁盘换入页面,进程等待内存就绪的时间变长
- so > 0 且持续不为零:表示内存压力大,内核不断把数据“踢”到磁盘,写 swap 本身就会阻塞进程
- 只要 si 或 so 中任一值连续几轮采样都 > 100 KB/s,基本可确认内存不足已开始影响响应
观察 I/O 等待(wa)是否同步升高
swap 操作本质是磁盘读写,所以内存过载必然拉高 wa:
- wa 超过 15%~20%,尤其伴随 bi/bo 显著上升(比如 bo > 500 KB/s),说明磁盘正在被 swap 大量占用
- 此时即使 CPU us/sy 看似不高,用户操作仍会卡顿——因为进程多数时间在等 I/O 完成,而非争抢 CPU
- 注意区分:wa 高但 si/so 接近 0,问题可能出在其他 I/O(如数据库日志刷盘),不一定是内存问题
对照运行队列(r)和空闲内存(free)确认压力来源
避免误判,需交叉验证:
- r 值长期大于 CPU 核数:说明不仅内存吃紧,CPU 也在排队,响应延迟是多重瓶颈叠加
- free 值极低(例如低于 100 MB)且 buff/cache 无法有效回收:表明物理内存确实枯竭,不是缓存策略问题
- 若 free 还剩不少但 si/so 已起量,可能是应用内存泄漏或内核参数(如 vm.swappiness)设置过高,导致过早换出
用对采样方式才能抓到真实趋势
单次执行容易错过瞬态高峰,建议:
- 快速诊断:用
vmstat 1 10每秒采 10 次,观察 si/so/wa 是否呈上升或波动趋势 - 定位时段:加
-t参数(vmstat 2 -t)带时间戳,方便和用户反馈的卡顿时间对齐 - 排除干扰:首次输出是开机平均值,一律忽略;只看后续实时行











