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,今晚就能照着跑一遍,五分钟搞定。

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注