Skip to content

swapoff(关闭交换分区)

监控报警

告警规则(Prometheus):

# AlertRule
(1 - (node_memory_SwapFree_bytes / node_memory_SwapTotal_bytes)) * 100 > 80

当 swap 使用率超过 80% 时触发告警。


查看业务,确认可以关闭

在业务机器上手动检查内存情况:

# 以 GB 为单位查看内存使用情况
free -g

决策依据:

条件 说明
物理内存充足 Mem Free 和 Available 较高,不是因内存不足导致的频繁交换
Swap 分配较小且非必须使用 当前的 swap 未被内存压力大量置换
结合业务判断 当前负载允许短暂停顿

如果上述条件都满足,则可以继续执行 swapoff:

sudo swapoff -a -v     # verbose: 显示详细信息模式

预期成功结束。


swapoff -a -v长时间卡住怎么办?

本以为swapoff -a -v ,轻松搞定,没想到

在执行 swapoff -a -v后如果出现 CPU 负载飙升和长时间等待,并且报警使用率达到100%。

分析问题

查找占用 swap 的进程

smem -s swap -r | head -10 

输出示例:

PSS      RSS      USS  Swap  COMMAND       
   2.9 G    300 M      5 K   2.9 G nginx     
   6.1 G    800 M    128 K   6.1 G prometheus

确定是哪个应用占用了 swap,然后根据业务情况决定是否停止进程。

监控执行进度

是卡住了,还是进展缓慢?

通过以下方式观察当前 swap 使用情况:

watch -n 60 'cat /proc/swaps'

每 60 秒刷新一次观察是否有活跃的 swap entries。如果有数据表明仍在进行 writeback,耐心等待即可。

监控在过程中反到 100% 的原因分析

在执行 swapoff -a -v期间的监控系统可能会报告异常(指标接近或超过 100%),这是因为:

原因: swap off process:

  • SWAP total value(分母)在不断递减直到变为 0 bytes, 也可通过观察这个值的趋势查看关闭的进展.
  • 计算出的 (1-SwapFreeBytes/SwaptotalBys)⋅100比值趋近极限值。

这个现象只是过程过渡期产生,并不代表系统真正的错误状态——只要看到最终Swaptotal =0表示操作顺利完成~!🎉