小内存VPS跑着跑着进程被杀(OOM)、或者想给服务器加点”内存保险”,很多人会想到swap交换分区。但swap到底要不要设、设多大、有什么副作用?本文讲清楚,帮你正确决策。
一、swap是什么?
swap(交换分区)是硬盘上划出的一块空间,当物理内存(RAM)不够用时,系统把暂时不用的内存数据”换”到硬盘的swap里,腾出RAM给急需的进程。简单说,swap是内存的”应急备胎”。但备胎终究是硬盘,速度比真内存慢几个数量级。
二、swap的利与弊
好处:
- 防OOM:内存瞬时吃紧时,swap能兜底,避免进程被系统直接杀掉(OOM killer);
- 提升稳定性:给小内存机一个缓冲垫,应对偶发的内存峰值。
坏处:
- 慢:一旦频繁使用swap(称为”swap颠簸”),硬盘IO飙升,系统会卡得像卡死;
- 伤盘:频繁读写对SSD寿命有一定影响(现代SSD影响有限,但值得注意)。
三、结论:该不该开?
- 小内存VPS(1G/2G):建议开适量swap作为安全垫,防止偶发峰值导致OOM。但它是保险,不是让你长期超量使用内存的借口;
- 内存充足的服务器:可开小量或不开。数据库等对延迟敏感的服务,甚至倾向于关闭或调低swap使用倾向,避免关键数据被换到硬盘拖慢;
- 核心原则:swap是应急备胎,如果你的机器长期依赖swap运行,说明内存真的不够,该升级内存而不是加大swap。
四、如何添加swap(以2G为例)
# 创建2G的swap文件
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# 开机自动挂载
echo '/swapfile none swap sw 0 0' >> /etc/fstab
# 验证
free -h # 能看到swap行有了容量
设多大?经验参考:内存≤2G设1—2倍内存的swap,内存较大时设2—4G意思一下即可,无需设很大。
五、调优:swappiness参数
swappiness控制系统”多积极地使用swap”(0—100,越高越爱用swap)。默认值通常偏高(60),对服务器建议调低,让系统优先用物理内存、尽量少碰swap:
sysctl vm.swappiness=10 # 临时生效
echo 'vm.swappiness=10' >> /etc/sysctl.conf # 永久
设为10意味着”实在内存紧张才用swap”,兼顾了应急能力和性能。
六、怎么判断是该加swap还是升内存?
用 free -h 和监控观察:
- 偶尔小量用swap,平时RAM够 → swap正常发挥应急作用,没问题;
- swap长期占用高、系统卡顿 → 内存真不够了,该升级内存,加swap只会让机器卡得更久而不是崩得更快;
- 频繁OOM且已开swap → 明确的内存不足信号,升级配置。
总结:小内存机开适量swap当保险、调低swappiness、但别拿swap当内存用。真正内存不足时,升级到更大内存的方案才是正解——机器云支持平滑升配,香港VPS各内存档位可选、支持免费试用先验证你的业务到底需要多大内存。