Swap不是性能加速器而是内存耗尽时的保命机制;优先用fallocate秒级创建4GB swapfile,设权限600、mkswap格式化、swapon启用,并写入/etc/fstab实现永久生效,生产环境swappiness建议设为10。

Swap不是性能加速器,而是系统内存耗尽时的保命机制。配置前先确认是否真需要:如果物理内存长期充足、且不依赖休眠功能,可以不配;否则,建议至少配 2–4GB 的 /swapfile。
怎么快速创建一个可用的Swap文件
优先用 fallocate(快、无碎片),避免 dd(慢、可能触发磁盘写放大):
-
fallocate -l 4G /swapfile—— 创建 4GB 空洞文件(秒级完成) -
chmod 600 /swapfile—— 权限必须是 600,否则mkswap会拒绝格式化 -
mkswap /swapfile—— 格式化为 swap 类型 -
swapon /swapfile—— 启用,立即生效
验证:运行 swapon --show,能看到 /swapfile 出现在列表里,TYPE 是 file,SIZE 匹配你设定的值。
为什么Swap没在重启后自动启用
因为只执行了 swapon,没写入 /etc/fstab。临时启用 ≠ 永久启用。
- 别直接 echo 追加,先备份:
cp /etc/fstab /etc/fstab.bak - 追加行必须严格为:
/swapfile none swap sw 0 0(注意空格,不能有多余字符) - 写完后立刻测试语法:
swapon --verify—— 若报错,说明 fstab 写错了,别重启 - 生效方式不是重启,而是:
swapon -a(读取 fstab 并启用所有标记为 swap 的条目)
Swappiness设成多少才合理
默认值 60 太激进,容易把还活跃的页提前换出,尤其对数据库或 Java 应用很不友好。
- 桌面环境可设为 60–80(兼顾休眠响应)
- 服务器/生产环境强烈建议设为
10:sysctl vm.swappiness=10 - 永久生效要写进
/etc/sysctl.conf,并执行sysctl -p - 值为
0不代表“禁用 Swap”,只是内核只在 OOM 前一刻才用 —— 但休眠功能会失效
Swap分区和Swap文件哪个更合适
绝大多数场景下,/swapfile 更实用,除非你有独立 SSD 分区且追求极致 I/O 稳定性。
- Swap 文件:扩容/缩容方便(
swapoff→fallocate调整大小 →mkswap→swapon),适合云主机、容器宿主、笔记本 - Swap 分区:需提前规划磁盘空间,
mkswap /dev/sdb1后启用,性能略好但灵活性差,适合物理服务器固定配置 - 注意:LVM 卷、加密卷、Btrfs 子卷上建 swapfile 可能不兼容或不稳定,这类场景才考虑分区方式
Swap 的本质是兜底,不是常态。真正该花时间优化的,是应用内存使用和内核参数,而不是盲目加大 Swap。











