直接看 top 界面底部 kib swap 行可快速判断内存交换状态:total 为交换区总量,used>10mb 表明已启用 swap,free 接近 0 预示耗尽风险,avail mem 比 free 更真实反映可用内存;结合 %mem 排序查高 res 进程,并用 vmstat 观察 si/so>100 kb/s 确认活跃交换。

直接看 top 界面底部的 KiB Swap 行,就能快速掌握内存交换活动状态——它反映系统是否在频繁使用 swap(交换分区),这是物理内存不足的关键信号。
关注 Swap 行的四个核心数值
在 top 启动后的顶部统计区,找到形如 KiB Swap: 2048000 total, 1987656 free, 60344 used. 1520000 avail Mem 的一行。重点看:
- total:交换区总大小,由系统配置决定(如 2GB)
- used:当前已使用的 swap 量(单位 KiB)。只要这个值明显大于 0(比如 >10MB),就说明内核已开始把部分内存页换出到磁盘
- free:剩余可用 swap 空间。若接近 0,swap 即将耗尽,风险极高
- avail Mem:真正可用的物理内存估算值(含可回收缓存),比 “free” 更能反映实际余量。如果它远小于 total,而 used 又在增长,说明内存压力真实存在
结合进程列表判断谁在触发交换
swap 活动不是凭空发生的,一定有进程在大量占用内存。按以下步骤定位:
- 启动 top 后,直接按 M(大写)键,让进程列表按 %MEM 降序排列
- 观察前几位进程的 RES(常驻内存)和 VIRT(虚拟内存)列:RES 持续很高(如占总内存 30%+)、且 VIRT 远大于 RES,往往意味着该进程申请了大量内存但未全部使用,仍可能被换出
- 特别留意状态为 S(睡眠)但 RES 很大的进程——它们虽不占 CPU,却长期锁住物理内存,容易成为 swap 目标
交叉验证:用 free 命令补全视角
top 的 Swap 行只给总量,要确认交换是否“活跃”,需配合 free 查看换入换出速率:
- 运行 free -h,关注 Swap 行的 used 值,与 top 中的对比是否一致
- 再运行 vmstat 1 5(每秒刷新 5 次),重点看 si(swap-in,从磁盘读回内存 KB/s)和 so(swap-out,写入磁盘 KB/s)两列。只要 si 或 so 持续 > 100,就说明交换正在高频发生,系统已明显卡顿
小提示:swap 不为 0 不一定异常
现代 Linux 内核会主动将部分闲置内存页换出(哪怕还有空闲 RAM),以腾出空间给磁盘缓存(buff/cache),这属于正常优化行为。真正需警惕的是:used 持续上升 + avail Mem 快速下降 + so 值居高不下——这时才应检查内存泄漏或扩容。











