swap不是物理内存替代品,但可防oom killer杀进程;用fallocate -l 4g /swapfile创建最快最安全,失败时再用dd;启用前须chmod 600、mkswap、禁用zswap;/etc/fstab正确写法为“/swapfile none swap sw 0 0”;生产环境swappiness建议设10~30。

Swap 不是物理内存的替代品,但能防止 OOM killer 杀进程;只要系统有空闲磁盘空间,就能快速加 Swap,不需要重启,也不依赖 LVM 或额外硬盘。
用 fallocate 创建 Swap 文件比 dd 更快更安全
很多教程还在用 dd if=/dev/zero of=/swapfile bs=1M count=4096,但 fallocate 是原子操作、不写零、秒级完成,且不会因磁盘碎片或 I/O 延迟失败。CentOS 7+/Ubuntu 16.04+ 都支持。
-
fallocate -l 4G /swapfile是首选;如果提示Operation not supported(比如某些 XFS 或 NFS 挂载点),才退回到dd - 别把 Swap 文件放在
/tmp或/var/tmp:这些目录可能被 tmpfs 占用,实际没落盘 - 路径必须是根文件系统下的普通文件,不能是符号链接、bind mount 或容器卷
swapon 启用前必须做三件事:权限、格式化、禁用压缩
漏掉任意一步都会导致 swapon: /swapfile: swapon failed: Invalid argument 或静默失败。
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
-
chmod 600 /swapfile—— 必须,否则内核拒绝启用(安全策略) -
mkswap /swapfile—— 格式化为 swap 类型,不是 ext4 或 xfs - 如果启用了 zram 或 zswap(
lsmod | grep zswap),它们会抢占 swap 路径,需先sudo modprobe -r zswap再启用文件 swap
/etc/fstab 加 Swap 行容易写错格式
常见错误是复制粘贴时多空格、少空格,或把 none 写成 swap,导致开机卡在 initramfs 或启动慢几十秒。
- 正确写法只有一行:
/swapfile none swap sw 0 0(四个字段间用单个空格分隔) -
none是固定关键字,不是路径;sw是挂载选项,不是swap或defaults - 加完后务必运行
sudo swapon --show和sudo systemctl daemon-reload,再测试sudo systemctl restart systemd-swap(如已启用该服务)
vm.swappiness 设太高反而拖慢响应
默认值 60 对桌面还行,但对数据库、Java 应用或容器密集型服务器,频繁换出干净页会放大 I/O 压力,不如让内核优先回收 page cache。
- 生产环境建议设为
10~30:echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf && sudo sysctl -p - 设为
0并不等于禁用 swap(除非swapoff),只是“仅当内存彻底耗尽时才用”,仍可防 OOM - 注意:Kubernetes 节点或 OpenShift 环境通常要求
swappiness=0,否则 kubelet 可能报Node is under pressure
真正容易被忽略的是:Swap 文件所在分区的剩余空间必须始终大于 Swap 大小——否则 swapon 成功,但运行中一旦写满,系统会直接触发 OOM,而不是优雅降级。










