什么是zram
zram 是 Linux 内核提供的一种高效内存管理技术。它的核心原理是在 RAM 中划出一块区域作为压缩的块设备,并将其用作交换空间(Swap)。
当系统物理内存紧张时,zram 不会将数据写入缓慢的硬盘或 SSD,而是通过 CPU 将数据实时压缩并存储在内存中。由于内存的读写速度远超磁盘,且现代 CPU 的压缩效率极高,这种方式能显著缓解系统卡顿。
zram 的核心优势:
- 变相扩容:通过 LZO、ZSTD 等高效算法,通常能实现 2:1 甚至更高的压缩比,相当于以极小的 CPU 开销换取了更多的可用内存。
- 降低延迟:规避了传统磁盘交换带来的 I/O 瓶颈,使系统在多任务处理时更加流畅。
- 延长寿命:减少了对闪存介质(如 SSD、eMMC)的频繁写入,有效延长硬件寿命。无论是老旧设备“起死回生”,还是高性能设备优化,zram 都是一套兼顾成本与性能的绝佳方案。
如何开启zram
在debian上开启zram,首先需要安装zram-tools工具
apt update
sudo apt install zram-tools
之后编辑/etc/default/zramswap文件,该文件中一共包含四个配置项:
1.ALGO (压缩算法)
ALGO 决定了数据进入 zram 时使用的压缩引擎。
作用:平衡 CPU 负载与内存节省空间。
常见选项:
- lz4:极其快速,CPU 开销极小,但压缩率较低。适合追求系统响应速度、CPU 性能较弱的场景。
- zstd:目前的现代主流选择。压缩率明显高于 lz4,虽然略微消耗更多 CPU,但在现代多核处理器上表现优异。
查看支持列表:你可以通过 cat /sys/block/zram0/comp_algorithm 查看当前内核支持的所有算法(括号内为当前生效项)。
2.PERCENT (动态容量占比)
这是一个相对值配置,通常具有最高优先级。
作用:根据系统物理内存的总量,动态计算 zram 设备的大小。
优势:具有良好的硬件兼容性,无论在 4GB 还是 32GB 的机器上,都能按比例自动分配,无需手动修改。
3.SIZE (静态容量大小)
这是一个绝对值配置,单位通常为 MiB。
作用:手动指定 zram 设备的固定大小。
优先级:在你的配置脚本中,PERCENT 通常会覆盖 SIZE。只有当 PERCENT 未设置或被注释掉时,该值才会生效。
4.PRIORITY (交换优先级)
Linux 系统可以同时存在多个交换设备(如 zram、Swap 分区、Swap 文件)。
作用:告知内核优先使用哪个交换设备。数值越大,优先级越高(最高通常为 32767)。
zram 的读写速度本质上是内存操作,远快于任何物理磁盘。因此,zram 的优先级必须高于 SSD 或 HDD 上的 Swap 空间。建议设置为100。
ALGO=zstd
PERCENT=50
# SIZE=2560 #可以看到我这里将size注释了,只让PERCENT起作用
PRIORITY=100
保存并推出,之后重启服务
systemctl restart zramswap
systemctl enable zramswap
建议的优化
前面说过,由于zram是在内存中开辟了一块区域用于swap,这比使用硬盘进行swap要快的多,所以要让系统更积极的将内存中的数据移入zram
首先输入systemctl status systemd-sysctl,确保sysctl的状态为active,如果没有显示active那么则输入
systemctl enable systemd-sysctl
systemctl start systemd-sysctl
接下来确保/etc/sysctl.d内含有/etc/sysctl.conf的软连接,如果没有的话,那么则输入
ln -s /etc/sysctl.conf /etc/sysctl.d/sysctl.conf
这是因为sysctl在启动时只会读取sysctl.d文件夹下的配置文件
接下来在/etc/sysctl.conf中写入
# 1. 提高使用 Swap 的积极性,建议改为100或更高
vm.swappiness = 150
# 2. 禁用页簇
# 传统的 Swap 每次会连带读取相邻的内存页。但 zRAM 是在内存中操作,连带读取会增加 CPU 计算解压的负担。将其设置为 0,表示每次只交换需要的页面。
vm.page-cluster = 0
# 3. 调整缓存压力阈值,稍微降低系统回收 VFS 缓存(目录和 inode)的倾向。
vm.vfs_cache_pressure = 50
保存文件后输入sysctl --system使配置生效