Swap 是 Linux 内核在物理内存不足时将部分内存页临时移至磁盘的溢出缓存机制,不是虚拟内存替代品,不加速程序或解决内存泄漏,仅缓解 OOM 杀进程。

Swap 是什么,不是什么
Swap 是 Linux 内核在物理内存不足时,把部分内存页(page)临时移到磁盘上的机制,本质是内存的“溢出缓存”,不是虚拟内存的替代品。它不加速程序运行,也不解决内存泄漏——只缓解 OOM(Out of Memory)杀进程的节奏。
常见误解包括:以为开 Swap 就能“多跑几个服务”,或认为 Swap 越大系统越稳。实际上,频繁换入换出(swap-in / swap-out)会拖慢响应,尤其在机械硬盘上,一次 swapin_readahead 可能引入几十毫秒延迟。
什么时候该开 Swap,开多少
是否启用 Swap 取决于工作负载类型和硬件配置,不是“有就开”:
- 桌面/笔记本:建议开启,大小设为
1–2 GiB即可,主要应对休眠(hibernate)和偶发峰值; -
云服务器(无休眠需求):若内存充足且负载稳定(如长期运行的 Go/Java 服务),可关闭 Swap;但若使用 Kubernetes 或容器编排,建议保留小 Swap(
512 MiB),避免内核oom_killer突然干掉关键进程; - 内存 ≤ 2 GiB 的旧设备:Swap 必开,大小建议 ≥ 物理内存,但需搭配
vm.swappiness=10控制倾向; - SSD 机器:可开 Swap,但避免长期高频率使用,SSD 寿命虽长,
swapon持续写入仍会增加磨损。
如何安全启用/禁用 Swap 分区或文件
Swap 可基于分区(/dev/sdb2)或文件(/swapfile)实现。文件方式更灵活,但需注意权限与预分配:
启用 Swap 文件示例:
这是一组使用CSS3制作的炫酷鼠标滑过按钮动画特效。这30种鼠标滑过按钮的动画特效分别使用CSS3 transition和transform属性来制作按钮边框,文本动画以及流光动画效果,各种效果都非常有创意。
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 永久生效:追加到 /etc/fstab echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
禁用时务必先 swapoff,再删除文件或注释 fstab 行。直接删 /swapfile 而未 swapoff,会导致内核仍尝试访问已释放空间,触发 Bad page state 类错误。
Swappiness 和 Zswap 的实际影响
vm.swappiness 控制内核“多愿意”把匿名页换出,取值 0–100。注意:0 不等于“完全不 Swap”,只是优先回收 page cache;而 100 会让内核激进换出,反而加剧抖动。
典型调优建议:
- 数据库服务器(MySQL/PostgreSQL):设为
1,保内存给 buffer pool; - 通用 Web 服务器:
10–30平衡响应与稳定性; - 内存紧张但 CPU 有余力的场景:考虑启用
zswap(压缩后暂存于 RAM),它不替代 Swap,而是减少真正写入磁盘的量——但会抬高 CPU 使用率,且仅对匿名页有效。
真正容易被忽略的是:Swap 效果高度依赖 workload 的内存访问局部性。随机访问大堆内存的程序(如某些 Python 数据处理脚本),即使开了 Swap,也会因频繁缺页中断而卡死,这时候该优化代码,而不是调 swappiness。









