zram 是什么
zram 把一部分物理内存虚拟成压缩块设备,用它作为 swap 时,换出的页会先被压缩后存放,从而避免真实磁盘 IO——本质是用 CPU 时间换内存空间。它适合内存紧张而 CPU 有余量的场景(小规格云主机、容器宿主、边缘设备)。实际收益取决于数据可压缩程度与压缩算法开销,不能用标称容量当作可用内存的直接增量。
基本信息
| 适用平台 | Linux(多数发行版内置 zram 模块) |
|---|---|
| 典型流程 | modprobe zram → 设置 disksize → mkswap → swapon |
| 管理工具 | zramctl(列出设备、算法、大小与用量) |
| 统计文件 | /sys/block/zram0/mm_stat |
| 配置集成 | 发行版常提供 zram-generator 或相关服务自动配置 |
| 顺序约束 | disksize 必须在设备启用之前设置 |
典型使用场景
- 小规格实例提升可承载负载:用压缩交换换取更大的有效内存
- 容器宿主缓解内存压力,同时避免引入磁盘 swap 的 IO 抖动
- 边缘设备与单板机延长可用内存,代价是增加 CPU 负载
- 替代磁盘 swap 改善换页延迟,尤其在没有高速存储的机器上
- 测试环境快速获得换页空间,验证应用在内存受限下的行为
手动配置示例
手动配置示例
sudo modprobe zram # 加载模块并创建 /dev/zram0
sudo sh -c 'echo 2G > /sys/block/zram0/disksize' # 设置设备大小,必须在启用前完成
sudo mkswap /dev/zram0 # 写入 swap 签名
sudo swapon -p 100 /dev/zram0 # 以较高优先级启用,优先于磁盘 swap
zramctl # 查看设备名、算法、大小与当前用量
cat /sys/block/zram0/mm_stat # 原始数据量、压缩后大小与实际内存占用
grep -E 'pswpin|pswpout' /proc/vmstat # 观察换页计数,确认确实在被使用指标读法
| 字段 | 含义 | 判读要点 |
|---|---|---|
| DATA | 写入的原始数据量 | 反映换出总量 |
| COMPR | 压缩后数据大小 | 越小说明压缩效果越好 |
| TOTAL | 实际占用的内存(含元数据) | 这才是真实的内存代价 |
| ALGORITHM | 压缩算法(如 zstd、lzo-rle) | 影响 CPU 开销与压缩比 |
| STREAMS | 压缩流数量 | 多核场景下影响并行处理能力 |
disksize 只能在设备尚未启用时设置,顺序错误会报设备忙。要修改大小需先 swapoff,再重置设备后重新配置,不能直接覆盖正在使用的设置。
压缩比与数据特征强相关:文本类数据压缩收益明显,已压缩或加密过的数据几乎没有收益。评估效果应看 mm_stat 里的实际占用与 CPU 使用率变化,而不是只看 disksize。