zRAM不是内存扩容,而是用CPU换减少swap I/O,适用于CPU尚可但内存吃紧的老机器;需确认内核支持CONFIG_ZRAM=y和CONFIG_ZRAM_LZ4=y,加载模块后设disksize、算法、mkswap并swapon -p 100,配合vm.swappiness=10防颠簸,通过mm_stat调优,用systemd服务开机启用。

zRAM 不是“给内存扩容”,而是用 CPU 换取更少的 swap I/O —— 对老机器(尤其是 SATA SSD 或 HDD、CPU 尚可但内存吃紧)效果明显,但盲目设大反而拖慢系统。
确认内核是否支持 zRAM 和 LZ4
老机器常跑旧内核,得先验证是否内置支持。运行:
grep CONFIG_ZRAM /boot/config-$(uname -r)
必须看到 CONFIG_ZRAM=y,且最好有 CONFIG_ZRAM_LZ4=y(LZ4 压缩/解压快,对老 CPU 更友好)。若全为 CONFIG_ZRAM is not set,说明内核未编译 zRAM,modprobe zram 会失败,此时需升级内核或重编译。
即使配置存在,也需检查模块能否加载:
sudo modprobe zram num_devices=1
成功后应出现 /dev/zram0;若报 Module zram not found,说明模块未安装(常见于某些精简版 CentOS/RHEL 镜像),需装 kernel-modules-extra 或对应包。
手动创建并启用 zRAM swap 设备
关键不是“能设多大”,而是“设多大才不抢真实内存”。zRAM 占用的是物理 RAM,压缩后存数据,但解压时仍要临时分配内存。对 4GB 内存的老服务器,建议初始值设为 1G(即物理内存的 25%):
echo 1G | sudo tee /sys/block/zram0/disksize<br>echo lz4 | sudo tee /sys/block/zram0/comp_algorithm<br>mkswap /dev/zram0<br>swapon -p 100 /dev/zram0
-
-p 100确保它比所有磁盘 swap(默认优先级 0)先被使用 - 如果已有磁盘 swap,用
swapon --show确认优先级顺序;若 zRAM 未排第一,先swapoff原 swap,再用-p 100启用 zRAM - 常见错误:
comp_algorithm直接写入后swapon:部分内核版本会 fallback 到低效算法(如 lzo),导致 CPU 占用飙升
调低 vm.swappiness 防止 swap 颠簸
老机器内存小,vm.swappiness=60(默认)太激进,容易把刚读进 cache 的页又压进 zRAM,徒增 CPU 开销。建议调低:
sudo sysctl vm.swappiness=10
这个值意味着:仅当可用内存低于约 10% 时,内核才开始积极 swap —— 给 page cache 留足空间,减少无谓压缩/解压循环。
zRAM 大小不是固定值。观察实际使用情况再调整:
- 看压缩率:
cat /sys/block/zram0/mm_stat中第 5 字段是「原始数据大小」,第 6 字段是「压缩后大小」,比值越接近 2.0 越理想 - 若压缩率长期
- 若
top里%Cpu(s)中sy(system)持续 >30%,可能是压缩开销过大,考虑换回 lzo 或降低disksize
开机自动启用必须用 systemd service
/etc/fstab 不适用,硬写进去会导致开机失败。正确做法是使用 systemd service:
- Debian/Ubuntu 推荐直接用
systemd-zram-generator(默认自带),只需配置/etc/systemd/zram-generator.conf - CentOS/RHEL 需手动写 service,注意依赖顺序:
Before=swap.target且WantedBy=multi-user.target - 核心逻辑必须包含四步:
modprobe zram、echo $size > /sys/class/zram/zram0/disksize、mkswap /dev/zram0、swapon -p 100 /dev/zram0 - 别忘了加
ExecStartPre=-/usr/bin/sh -c 'echo 0 > /sys/class/zram/zram0/reset'清理残留状态
zRAM 的压缩率高度依赖数据特征,文本、日志类负载收益高,加密内存或已压缩数据几乎无效;它不解决内存泄漏,只缓解短期压力——真正卡死前,该查 ps aux --sort=-%mem 还是得查。


















