VPS 内存不够用?swap 扩容 + zram 压缩内存两招实战
低价 VPS 的内存普遍抠门,512MB、1…
低价 VPS 的内存普遍抠门,512MB、1GB 是常态。装个 Docker,再跑两三个小服务,内存动不动就飙红,进程被 OOM 杀掉,你还得半夜爬起来重启。今天分享两招:先加 swap 兜底,再上 zram 提速,全程零成本,效果立竿见影。
先摸清自己机器的底细
动手前先看一眼内存和 swap 现状,别一上来就瞎折腾:
free -h
swapon --show
如果 free -h 里 swap 那行是 0,或者 swapon --show 直接没输出,说明这台机器连 swap 都没有,内存一爆就是硬扛,非常危险。
第一招:加个 swap 文件兜底
swap 本质是拿硬盘当内存的缓冲区,虽然慢,但能在内存紧张时救一命。下面创建一个 2GB 的 swap 文件:
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
验证一下是否生效:
swapon --show
接着写进开机自启,否则重启就没了:
echo '/swapfile none swap sw 0 0' >> /etc/fstab
顺手调低 swappiness
Linux 默认的 vm.swappiness=60,对小内存机器来说太“爱”用 swap 了,动不动就把数据往硬盘里塞,导致越用越卡。降到 10,让系统优先用物理内存:
sysctl vm.swappiness=10
echo 'vm.swappiness=10' >> /etc/sysctl.conf
第二招:zram 把内存“变多”
swap 再快也是硬盘,跟内存不是一个量级。zram 的思路更妙:在内存里划一块区域,做成压缩盘当 swap 用。数据写进去先压缩再存,等于用 CPU 换内存,读起来比传统 swap 快一个数量级。
Debian/Ubuntu 直接装官方工具包:
apt update && apt install -y zram-tools
编辑配置文件,指定压缩算法和占内存比例:
nano /etc/default/zramswap
把内容改成下面这样,意思是启用 zstd 算法,划出物理内存的 50% 当压缩 swap:
ALGO=zstd
PERCENT=50
重启服务并确认:
systemctl restart zramswap
swapon --show
这时应该能看到一个 /dev/zram0 的条目,优先级比 swap 文件还高,系统会优先用它。
小结
两招组合下来:swap 文件负责“兜底”,zram 负责“提速”,再配合 swappiness 调低,512MB 的小机器跑两三个轻量服务基本稳了。如果你手里也有几台低配 VPS 经常 OOM,今晚就能照着跑一遍,五分钟搞定。
