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,而不是先换出一部分。
几个常见误区
- "云服务器不用 Swap":云盘 IO 确实比本地 NVMe 慢,但 OOM 直接杀进程的代价更大,加一点 Swap 收益远大于成本。
- "Swap 越大越好":一般 1~2 倍物理内存足够;这台 2G 机器加 2G 就合适。
- "加了 Swap 就不用管内存了":Swap 只是缓冲,长期大量使用说明内存不够,该优化程序或升配了。
检查是否已经在用 Swap
free -h # 看 Swap used
swapon --show # 看 swap 设备
cat /proc/swaps
我这台机器从加 Swap 到现在,Swap 使用量长期为 0——这说明 2G 内存目前够用,Swap 只是兜底。兜底的意义,就是平时用不到。