free -h 可快速查看 Swap 实时用量和余量,但无法反映消耗速率;top 需启用 SWAP 列并结合 RES/VIRT 分析进程换出行为;剩余警戒线需按总量设定(≤4GB 时<512MB,>4GB 时≥80% 使用率即预警)。

直接看 free -h 能快速掌握 Swap 当前用量和余量,但无法反映“消耗速率”;top 本身不提供 Swap 变化率,需配合手动观察或简单脚本辅助。所谓“剩余警戒线”,不是系统内置阈值,而是运维人员根据业务敏感度设定的主观安全边界(例如剩余低于 500MB 或使用率超 80% 就预警)。
用 free -h 快速抓取 Swap 实时快照
free -h 输出中 Swap 行的 used 和 free 是核心指标:
- used:当前已写入 Swap 的数据量(即物理内存不足时被换出的部分)
- free:Swap 分区未被使用的空间,是判断是否接近耗尽的直接依据
- 建议搭配
-s 2参数持续刷新,例如free -h -s 2每 2 秒更新一次,肉眼对比变化可粗略估算消耗速度(如 5 秒内 free 从 1.2G 降到 1.0G,说明约 40MB/s 持续换入) - 注意:Swap 使用量突增往往伴随
available(可用物理内存)快速下降,两者要联动看
在 top 中定位高 Swap 占用进程
top 不显示 Swap 消耗速率,但能帮你找到“谁在把内存往 Swap 里塞”:
- 启动后按 Shift + M,按内存占用(RES)降序排列,重点关注 RES 大且运行时间长的进程
- 按 f 进入字段管理,启用 SWAP 列(部分发行版默认不显示),该列数值是进程当前被换出到 Swap 的内存页大小
- 若某进程 SWAP 值持续增长(比如几秒内从 100MB 涨到 300MB),说明它正在频繁触发缺页中断并被内核换出,是 Swap 消耗加速的源头
- 结合 VIRT(虚拟内存总量)和 RES(常驻物理内存)比值:若 VIRT 远大于 RES(如 4G vs 200M),且 SWAP 同步上升,大概率是内存泄漏或配置不当
设定实用的剩余警戒线参考值
警戒线取决于 Swap 总量和业务容忍度,没有统一标准,但可按以下原则设:
- Swap 总量 ≤ 4GB 时,剩余 < 512MB 视为高风险,可能影响响应延迟
- Swap 总量 > 4GB 时,建议按百分比控制:使用率 ≥ 80% 即触发人工检查(如 16G Swap 已用 12.8G)
- 生产环境不建议让 Swap used 长期 > 0,理想状态是 used 接近 0 且 free 稳定;少量波动(几十 MB)属正常,持续增长需干预
- 若发现 free 快速归零(如 10 秒内从 1G 掉到 100MB),通常意味着 OOM killer 即将启动,必须立刻排查
补充:简单估算消耗速率的命令组合
想量化每秒 Swap 变化,可用两次 free 差值计算:
- 执行
free -k | awk '/Swap:/ {print $3}'获取当前 used(KB) - 间隔 N 秒再执行一次,差值 ÷ N 就是平均 KB/s 消耗速率
- 例如:第一次 31512 KB,10 秒后 36784 KB,则速率 ≈ (36784 − 31512) ÷ 10 = 527 KB/s
- 更省事的做法:用
watch -n 5 'free -h | grep Swap'每 5 秒刷新,靠眼睛盯趋势

















