2026-10-24 · Linux / 性能 / 运维

2G 小内存服务器加 Swap 的正确姿势

2 核 2G 的轻量服务器是最常见的入门配置,但 2G 内存跑点东西就紧张:编译个软件、跑个爬虫、来一次小流量高峰,都可能触发 OOM Killer 把进程干掉。加 Swap 是最便宜的保险。

创建并启用 Swap

# 2G 文件作为 swap
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

验证:

free -h
swapon --show

注意:/swapfile 权限必须是 600,否则 swapon 会拒绝(别的用户可读写的 swap 文件有安全风险)。

持久化:写进 fstab

不写 fstab 的话重启就没了:

echo '/swapfile none swap sw 0 0' >> /etc/fstab

更稳妥的写法是用 UUID(blkid 查看),但对固定路径的 swapfile 来说上面这种已经够用。

swappiness 设多少

vm.swappiness 默认 60,意思是内存压力下比较积极地把内存页换出。对服务器来说,我更希望优先用物理内存,只在真不够时才用 Swap:

echo 'vm.swappiness=10' > /etc/sysctl.d/99-swap.conf
sysctl -p /etc/sysctl.d/99-swap.conf

设 10 而不是 0:完全关掉会让系统在内存紧张时直接 OOM,而不是先换出一部分。

几个常见误区

  1. "云服务器不用 Swap":云盘 IO 确实比本地 NVMe 慢,但 OOM 直接杀进程的代价更大,加一点 Swap 收益远大于成本。
  2. "Swap 越大越好":一般 1~2 倍物理内存足够;这台 2G 机器加 2G 就合适。
  3. "加了 Swap 就不用管内存了":Swap 只是缓冲,长期大量使用说明内存不够,该优化程序或升配了。

检查是否已经在用 Swap

free -h          # 看 Swap used
swapon --show    # 看 swap 设备
cat /proc/swaps

我这台机器从加 Swap 到现在,Swap 使用量长期为 0——这说明 2G 内存目前够用,Swap 只是兜底。兜底的意义,就是平时用不到。