swapoff 在做什么
swapoff 会先把指定 swap 设备上已换出的页全部读回物理内存,然后关闭该设备。风险就藏在这一步:如果当前可用内存不足以容纳这些页,回迁过程中会触发高强度回收甚至 OOM。因此它属于高风险操作,执行前必须核对可用内存、承诺量与 swap 已用量,并预留维护窗口。
基本信息
| 命令形式 | swapoff /dev/<设备> 或 swapoff -a(关闭全部) |
|---|---|
| 前提检查 | free -h、/proc/meminfo 的 MemAvailable 与 Committed_AS、/proc/swaps |
| 耗时 | 取决于已换出数据量,几 GB 可能持续数分钟并伴随 IO 抖动 |
| 后续动作 | 同步评估 vm.swappiness 与 OOM 保护(oom_score_adj) |
| 可回滚性 | 可再次 swapon,但代价是重新换出,且期间内存压力已发生 |
| 适用平台 | Linux(util-linux 提供 swapoff) |
典型使用场景
- 更换 swap 方案:先关闭旧设备,再启用新的 swap 文件或 zram
- 验证 swap 对性能的影响:关闭做对照实验,量化延迟变化
- 数据库等不允许换出的服务,在维护窗口内降低不确定性
- 清理误创建或不再需要的 swap 分区与文件
- 平台要求宿主禁用 swap(部分容器运行时的推荐配置)时执行
检查与执行
检查与执行
free -h # 先看可用内存与 swap 已用量,判断回迁是否安全
awk '/^(Committed_AS|CommitLimit|SwapTotal|SwapFree)/{print}' /proc/meminfo # 承诺与 swap 水位
cat /proc/swaps # 确认设备名与已用空间,别看错目标
sudo swapoff /swapfile # 关闭单个设备;swapoff -a 会关闭全部
swapon --show # 关闭后确认结果
awk '/^pswpin|^pswpout/{print}' /proc/vmstat # 观察换页计数是否停止增长执行前检查表
| 检查项 | 命令 | 通过标准 |
|---|---|---|
| 可用内存 | free -h | MemAvailable 足以覆盖 swap 已用量并留余量 |
| 承诺余量 | /proc/meminfo 的 Committed_AS 与 CommitLimit | 两者差距明显,说明超额分配空间充足 |
| swap 已用 | /proc/swaps | 已用量越小越安全,越大越需要窗口与监控 |
| 执行窗口 | 变更流程 | 避开业务高峰与批处理时段,并通知相关方 |
已换出数据越多,回迁时的内存峰值与耗时越高。几 GB 的 swap 使用量在机械盘或高负载存储上可能持续数分钟,期间业务延迟会明显抖动,需要有人在现场监控。
关闭 swap 只是取消了缓冲区,并没有增加内存。操作后应重新评估 vm.swappiness 与关键进程的 OOM 保护策略,避免下一个内存高峰直接触发终止。