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.confsystemd 持久化配置
开机自动挂载 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# 应输出 enabledQ:zstd 算法不可用
部分旧内核版本不支持 zstd,检查:
cat/sys/block/zram0/comp_algorithm# 括号内为当前使用算法,列表中没有 zstd 则说明不支持,改用 lz4如果你正在寻找适合运行 zram 优化方案的低价云服务器,雨云服务器 rainyun-com的 1 核 2GB 机型性价比极高,注册时填写优惠码2026off可领取 5 折优惠券,是部署轻量应用和学习 Linux 运维的理想平台。