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 | grep zram
安装辅助工具
# Ubuntu/Debian
apt update
apt install -y util-linux zram-tools
# CentOS/Rocky Linux
dnf install -y util-linux
查看当前 swap 状态
free -h
swapon --show
cat /proc/swaps
部署步骤
方法一:使用 zramctl 手动配置
zramctl 是 util-linux 提供的 zram 管理工具,操作简便:
# 加载 zram 模块,创建 1 个设备
modprobe zram num_devices=1
# 设置压缩算法为 lz4(速度最快)
echo lz4 > /sys/block/zram0/comp_algorithm
# 设置 zram 设备大小为物理内存的 50%(本例为 1GB)
echo 1G > /sys/block/zram0/disksize
# 格式化为 swap
mkswap /dev/zram0
# 启用 swap,优先级设为 100(高于磁盘 swap 的默认值 -2)
swapon -p 100 /dev/zram0
# 验证
swapon --show
free -h
方法二:使用 zram-tools 快速配置(Ubuntu)
Ubuntu 提供了 zram-config 包,可以一键配置:
apt install -y zram-config
systemctl enable zram-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_size
cat /sys/block/zram0/orig_data_size
核心功能配置
压缩算法选择
zram 支持多种压缩算法,各有侧重:
# 查看当前内核支持的算法
cat /sys/block/zram0/comp_algorithm
# 输出示例:lzo lzo-rle [lz4] lz4hc zstd
# 切换算法(设备未使用时才能切换)
swapoff /dev/zram0
echo zstd > /sys/block/zram0/comp_algorithm
swapon -p 100 /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 -w vm.swappiness=80
# 永久生效
echo "vm.swappiness=80" >> /etc/sysctl.d/99-zram.conf
sysctl -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
systemctl enable zram-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
EOF
chmod +x /etc/rc.local
进阶用法
多核并行压缩
zram 从内核 5.x 起支持多线程压缩:
# 设置压缩线程数(与 CPU 核心数匹配)
echo 2 > /sys/block/zram0/max_comp_streams
# 查看当前设置
cat /sys/block/zram0/max_comp_streams
同时保留磁盘 swap(混合方案)
对于极端内存不足的场景,可以同时使用 zram 和磁盘 swap:
# zram 高优先级(先用)
swapon -p 100 /dev/zram0
# 磁盘 swap 低优先级(兜底)
swapon -p 1 /dev/sda2
# 查看优先级
swapon --show
监控 zram 效果
# 实时监控内存使用
watch -n 2 '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 运行,或使用 sudo
sudo bash -c 'echo 1G > /sys/block/zram0/disksize'
Q:modprobe zram 后看不到 /dev/zram0
# 检查内核模块
lsmod | grep zram
# 手动创建设备
modprobe zram num_devices=1
ls /dev/zram*
Q:设备已在使用,无法修改参数
# 必须先关闭 swap 再重置
swapoff /dev/zram0
echo 1 > /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 运维的理想平台。
503

被折叠的 条评论
为什么被折叠?



