共计 1605 个字符,预计需要花费 5 分钟才能阅读完成。
介绍
在内存比较小的机器上,我们一般都会选择开启虚拟内存 swap,在内存不足时将部分数据写入磁盘。这种方式增加了内存,但是硬盘的访问速度比较慢。教程:Linux 创建和释放 swap 分区 - 阿蛮君博客
而 zram 是 Linux 内核提供的一种压缩内存块设备技术,相当于在内存里开一个 “压缩的硬盘”,数据压缩后占用更少的物理内存,从而增加可用内存容量。但是,压缩和解压操作更吃 CPU 资源,所以可以根据自己的需求选择合适的算法。
zram 和 swap 比较:
| 特性 | Swap | ZRAM |
|---|---|---|
| 访问速度 | 慢(磁盘 I/O) | 快(CPU 压缩/解压,近 RAM) |
| 内存利用率 | 无压缩,直接占用 | 压缩,内存使用更高效 |
| CPU 占用 | 低(磁盘读写为主) | 高(压缩/解压需 CPU) |
| 稳定性 | 高,可非常大 | 受 CPU 和内存限制,不适合过大 swap |
| 写入寿命 | SSD 有磨损 | 无额外磨损(RAM) |
开启zram
1. 检查模块是否加载
lsmod | grep zram
如果没有输出,说明没有加载模块。
2. 加载模块
sudo modprobe zram
# 再次检查
lsmod | grep zram
3. 安装zram工具
sudo apt install systemd-zram-generator
4. 配置
创建或编辑 /etc/systemd/zram-generator.conf:
[zram0]
# 大内存不开启
host-memory-limit = 8096
# 最大设置为2g
zram-size = min(ram / 2, 2048)
# 压缩算法
compression-algorithm = zstd
options = discard
5. 重载配置并启动
# 重新加载 systemd 守护进程
sudo systemctl daemon-reexec
# 启动 zram0 设备
sudo systemctl start systemd-zram-setup@zram0.service
# 查看状态
systemctl status systemd-zram-setup@zram0.service
6. 查看zram信息
zramctl
显示 zram 设备大小、压缩率和 swap 状态。
7. 查看swap信息
swapon --show
手动创建
在 centos 或其他 linux 上可能需要手动创建 zram,重启会失效,所以需要通过服务和脚本进行管理。
1. 创建 systemd 服务文件
/etc/systemd/system/zram.service:
[Unit]
Description=Setup ZRAM Swap
After=multi-user.target
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/sbin/setup-zram.sh
ExecStop=/usr/local/sbin/cleanup-zram.sh
[Install]
WantedBy=multi-user.target
2. 创建启动脚本
/usr/local/sbin/setup-zram.sh:
#!/bin/bash
modprobe zram
echo 2G > /sys/block/zram0/disksize
echo zstd > /sys/block/zram0/comp_algorithm
mkswap /dev/zram0
swapon /dev/zram0
添加执行权限:
sudo chmod +x /usr/local/sbin/setup-zram.sh
3. 创建停止脚本
/usr/local/sbin/cleanup-zram.sh:
#!/bin/bash
swapoff /dev/zram0
echo 0 > /sys/block/zram0/reset
添加执行权限:
sudo chmod +x /usr/local/sbin/cleanup-zram.sh
4. 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable --now zram.service
AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完