zram 压缩内存 swap 配置实战:低内存服务器性能提升指南

zram 压缩内存 swap 配置实战:低内存服务器性能提升指南

在内存资源有限的服务器上,传统的磁盘 swap 分区虽然能扩展可用内存,但由于磁盘 I/O 速度远低于内存,一旦系统频繁使用 swap,性能会急剧下降。zram 是 Linux 内核内置的压缩内存模块,它在 RAM 中创建一个压缩块设备作为 swap 使用,读写速度比磁盘 swap 快数十倍,同时通过压缩算法有效扩展了可用内存容量。

对于 1GB 或 2GB 内存的轻量级 VPS 来说,zram 几乎是必备优化手段。本文将详细介绍如何配置 zram 压缩内存,选择合适的压缩算法(lz4、zstd 等),并通过 systemd 实现开机自动挂载,最终实现内存利用效率的显著提升。

本文适用于 Ubuntu 20.04/22.04/24.04、Debian 11/12 等主流 Linux 发行版,配置方法通用,大多数情况下无需重启即可生效。


服务器配置

本文实验环境基于雨云服务器 rainyun-com的低配机型。注册填优惠码2026off领 5 折优惠券,可以非常低的价格获得稳定的云服务器。

推荐配置:1 核 2GB 内存 Linux 云服务器

该机型完全满足 zram 实验和生产部署需求。1 核 CPU 能流畅运行大多数轻量应用,2GB 物理内存搭配 zram 后,实际可用内存可以提升 30%~50%,支持更多并发进程。


安装准备

检查内核支持

现代 Linux 发行版(内核 3.14+)均内置 zram 模块,无需额外安装:

# 检查内核版本uname-r# 检查 zram 模块是否可用modprobe zram lsmod|grepzram

安装辅助工具

# Ubuntu/Debianaptupdateaptinstall-yutil-linux zram-tools# CentOS/Rocky Linuxdnfinstall-yutil-linux

查看当前 swap 状态

free-hswapon--showcat/proc/swaps

部署步骤

方法一:使用 zramctl 手动配置

zramctl是 util-linux 提供的 zram 管理工具,操作简便:

# 加载 zram 模块,创建 1 个设备modprobe zramnum_devices=1# 设置压缩算法为 lz4(速度最快)echolz4>/sys/block/zram0/comp_algorithm# 设置 zram 设备大小为物理内存的 50%(本例为 1GB)echo1G>/sys/block/zram0/disksize# 格式化为 swapmkswap/dev/zram0# 启用 swap,优先级设为 100(高于磁盘 swap 的默认值 -2)swapon-p100/dev/zram0# 验证swapon--showfree-h

方法二:使用 zram-tools 快速配置(Ubuntu)

Ubuntu 提供了zram-config包,可以一键配置:

aptinstall-yzram-config systemctlenablezram-config systemctl start zram-config

默认会创建等于物理内存一半大小的 zram swap。

查看 zram 设备状态

# 查看所有 zram 设备详细信息zramctl# 输出示例:# NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT# /dev/zram0 lz4 1G 512M 180M 200M 2 [SWAP]# 查看压缩比cat/sys/block/zram0/compr_data_sizecat/sys/block/zram0/orig_data_size

核心功能配置

压缩算法选择

zram 支持多种压缩算法,各有侧重:

# 查看当前内核支持的算法cat/sys/block/zram0/comp_algorithm# 输出示例:lzo lzo-rle [lz4] lz4hc zstd# 切换算法(设备未使用时才能切换)swapoff /dev/zram0echozstd>/sys/block/zram0/comp_algorithmswapon-p100/dev/zram0

各算法对比:

算法压缩速度解压速度压缩率推荐场景
lz4极快极快一般低内存、高并发
lz4hc较快极快较好均衡场景
zstd中等优秀内存充裕、追求压缩率
lzo一般兼容性优先

建议:1 核 2GB 机器优先选lz4,追求内存扩展效果时选zstd

调整 swappiness

vm.swappiness控制内核使用 swap 的积极程度,取值 0-200:

# 查看当前值(默认 60)cat/proc/sys/vm/swappiness# 临时修改(推荐 zram 场景设为 80-100,因为 zram 速度接近内存)sysctl-wvm.swappiness=80# 永久生效echo"vm.swappiness=80">>/etc/sysctl.d/99-zram.confsysctl-p/etc/sysctl.d/99-zram.conf

systemd 持久化配置

开机自动挂载 zram swap 有两种方式。

方式一:systemd service 脚本

创建配置文件:

cat>/etc/systemd/system/zram-swap.service<<'EOF' [Unit] Description=zram swap After=local-fs.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/bash -c '\ modprobe zram num_devices=1; \ echo lz4 > /sys/block/zram0/comp_algorithm; \ echo 1G > /sys/block/zram0/disksize; \ mkswap /dev/zram0; \ swapon -p 100 /dev/zram0' ExecStop=/bin/bash -c '\ swapoff /dev/zram0; \ echo 1 > /sys/block/zram0/reset' [Install] WantedBy=multi-user.target EOF

启用服务:

systemctl daemon-reload systemctlenablezram-swap.service systemctl start zram-swap.service systemctl status zram-swap.service

方式二:使用 /etc/rc.local(简单方式)

cat>>/etc/rc.local<<'EOF' # zram swap modprobe zram num_devices=1 echo lz4 > /sys/block/zram0/comp_algorithm echo 1G > /sys/block/zram0/disksize mkswap /dev/zram0 swapon -p 100 /dev/zram0 EOFchmod+x /etc/rc.local

进阶用法

多核并行压缩

zram 从内核 5.x 起支持多线程压缩:

# 设置压缩线程数(与 CPU 核心数匹配)echo2>/sys/block/zram0/max_comp_streams# 查看当前设置cat/sys/block/zram0/max_comp_streams

同时保留磁盘 swap(混合方案)

对于极端内存不足的场景,可以同时使用 zram 和磁盘 swap:

# zram 高优先级(先用)swapon-p100/dev/zram0# 磁盘 swap 低优先级(兜底)swapon-p1/dev/sda2# 查看优先级swapon--show

监控 zram 效果

# 实时监控内存使用watch-n2'free -h && echo "---" && zramctl && echo "---" && cat /proc/meminfo | grep -E "SwapTotal|SwapFree|SwapCached"'# 查看压缩效率(压缩比)awk'{if(NR==1) orig=$1; else comp=$1; if(NR==2) printf "压缩比: %.2f:1\n", orig/comp}'\<(cat/sys/block/zram0/orig_data_size /sys/block/zram0/compr_data_size)

性能对比

在 1 核 2GB 服务器上的实测数据:

指标磁盘 swap (HDD)磁盘 swap (SSD)zram (lz4)zram (zstd)
读取速度~80 MB/s~400 MB/s~3000 MB/s~2200 MB/s
写入速度~60 MB/s~300 MB/s~2500 MB/s~1800 MB/s
内存利用率100%100%~150%(压缩后)~180%(压缩后)
CPU 额外开销极低极低中等

zram (lz4) 的读写速度约为 SSD swap 的 7-8 倍,几乎不会感知到 swap 延迟。


常见问题排查

Q:echo 1G > /sys/block/zram0/disksize报 Permission denied

# 确保以 root 运行,或使用 sudosudobash-c'echo 1G > /sys/block/zram0/disksize'

Q:modprobe zram 后看不到 /dev/zram0

# 检查内核模块lsmod|grepzram# 手动创建设备modprobe zramnum_devices=1ls/dev/zram*

Q:设备已在使用,无法修改参数

# 必须先关闭 swap 再重置swapoff /dev/zram0echo1>/sys/block/zram0/reset# 然后重新配置

Q:重启后 zram 消失

确认 systemd 服务已正确启用:

systemctl is-enabled zram-swap.service# 应输出 enabled

Q:zstd 算法不可用

部分旧内核版本不支持 zstd,检查:

cat/sys/block/zram0/comp_algorithm# 括号内为当前使用算法,列表中没有 zstd 则说明不支持,改用 lz4

如果你正在寻找适合运行 zram 优化方案的低价云服务器,雨云服务器 rainyun-com的 1 核 2GB 机型性价比极高,注册时填写优惠码2026off可领取 5 折优惠券,是部署轻量应用和学习 Linux 运维的理想平台。