Linux 更改内存交换 swap 为 zram 压缩,减小磁盘写入
1、查看当前 swap 的方式
swapon --show
我这里是默认的 swap 文件,大小为 2G。
2、安装 zram
Ubuntu 下:
sudo apt install zram-tools
安装后默认会启动:
3、关闭默认的 swap 文件
sudo swapoff /swapfile
其次是关闭 /etc/fstab 中的 /swapfile(下图最后一行):
这一步只是优化,不关闭也没影响。
4、配置 zram
该文件安装 zram 后默认会生成,根据个人喜好选择编辑器,我习惯 vi:
sudo vi /etc/default/zramswap
可以根据个人情况,修改以下几个参数:
# 压缩算法
ALGO=lz4
# 定义 zram 设备占用的最大内存空间(如 50% 内存)
PERCENT=20%
# swap 优先级(越高越优先使用)
PRIORITY=100
ALGO:
speed: lz4 > zstd > lzo
compression: zstd > lzo > lz4
lz4 为大多数场景的最佳选择。
PERCENT:
- 内存 ≤ 4GB:建议
PERCENT=50%~100%
(激进交换)。 - 内存 4~8GB:建议
PERCENT=25%~50%
。 - 内存 > 8GB:可设为
10%~25%
(zram 主要用于临时突发负载)。 - 警告:过度分配可能导致 OOM(内存耗尽),尤其在低内存设备上。
PRIORITY:
- 通常为
0
~32767
,默认磁盘 swap 优先级为-2
。 - 推荐值:
PRIORITY=100
(确保 zram 优先于磁盘)。
5、重启 zram 服务
sudo systemctl restart zramswap.service # 重启服务生效
如果遇到重启失败报错,提示设备或资源忙:
zramswap.service - Linux zramswap setupLoaded: loaded (/lib/systemd/system/zramswap.service; enabled; vendor preset: enabled)Active: failed (Result: exit-code) since Tue 2025-05-06 20:13:21 CST; 16s agoDocs: man:zramswap(8)Process: 5786 ExecStart=/usr/sbin/zramswap start (code=exited, status=1/FAILURE)Main PID: 5786 (code=exited, status=1/FAILURE)CPU: 15ms5月 06 20:13:21 systemd[1]: Starting Linux zramswap setup...
5月 06 20:13:21 root[5787]: Starting Zram
5月 06 20:13:21 zramswap[5787]: <13>May 6 20:13:21 root: Starting Zram
5月 06 20:13:21 zramswap[5786]: /usr/sbin/zramswap: 第 53 行: echo: 写入错误:设备或资源忙
5月 06 20:13:21 systemd[1]: zramswap.service: Main process exited, code=exited, status=1/FAILURE
5月 06 20:13:21 systemd[1]: zramswap.service: Failed with result 'exit-code'.
5月 06 20:13:21 systemd[1]: Failed to start Linux zramswap setup.
需要手动关闭 zram:
# 停止所有 swap 并卸载 zram 模块
sudo swapoff -a
sudo modprobe -r zram 2>/dev/null || true
sudo rm -f /dev/zram*# 确保内核模块干净加载
sudo modprobe zram num_devices=1
重新启动服务即可:
sudo systemctl restart zramswap.service