青枫博客 - zRAM
type: channel
link: https://www.vdj.me/tag/zRAM/
items: Debian/Ubuntu 开启 zRAM 内存压缩

Debian/Ubuntu 开启 zRAM 内存压缩
type: item
date: 2026-03-08T23:09:55+08:00
description: 在运行内存较小的 VPS（如 512MB、1GB）、树莓派，或者老旧笔记本时，内存不足（OOM）是一个让人头疼的问题。传统的 Swap（交换分区）虽然能缓解内存压力，但磁盘 I/O 极其缓慢，会导致系统严重卡顿，并加速 SSD 的磨损。本文将介绍一种现代且优雅的解决方案：zRAM。带你在 Debian/Ubuntu 系统上，以业界最佳实践的方式配置和调优 zRAM。什么是 zRAM？为什么需要它？zRAM 是 Linux 内核的一个模块，它会在内存中划出一块区域作为虚拟的 Swap 分区。当系统内存紧张时，操作系统不会把数据写到缓慢的硬盘上，而是将内存数据压缩后存放在 zRAM 中。需要使用时再解压出来。核心优势：速度极快： 内存的读写速度远超 NVMe SSD 和 HDD。保护硬盘： 大幅减少对硬盘的频繁读写，延长 SSD 和 SD 卡寿命。提升容量： 凭借现代压缩算法（如 zstd），1GB 的物理内存通常可以存放 2GB~3GB 的压缩数据。最佳实践配置指南网上有很多通过自定义脚本开启 zRAM 的教程，但这往往不够稳定。在 Debian/Ubuntu 下，最佳实践是使用官方源中提供的 zram-tools 包，并配合内核参数调优。步骤 1：安装 zram-tools首先，更新软件包列表并安装 zram-tools：apt update apt install zram-tools -y步骤 2：配置 zRAM 参数安装完成后，默认的配置比较保守。我们需要修改配置文件以达到最佳效果。打开配置文件：nano /etc/default/zramswap将文件内容修改为如下配置（或取消对应行的注释并修改）：# 压缩算法：强烈建议使用 zstd。 # zstd 在压缩率和解压速度之间取得了目前最好的平衡，是现代 Linux 的首选。 ALGO=zstd # zRAM 分配的物理内存比例：建议设置为 50。 # 这表示 zRAM 最多可以使用系统总物理内存的 50%。 # 注意：这并不意味着它会立刻占用 50% 的内存，而是随着需要动态增长的上限。 PERCENT=50 # Swap 优先级：设置为最高优先级（比如 100）。 # 如果你的系统同时存在硬盘 Swap，这能确保系统优先使用 zRAM。 PRIORITY=100保存并退出（在 Nano 中按 Ctrl+O 存盘，Enter 确认，Ctrl+X 退出）。应用更改并重启服务：systemctl restart zramswap systemctl enable zramswap步骤 3：验证 zRAM 是否生效使用以下命令查看当前的 Swap 状态：swapon --show你会看到类似下面的输出，注意 TYPE 为 partition，并且 PRIO 是 100。NAME TYPE SIZE USED PRIO /dev/zram0 partition 488M 0B 100还可以使用 zramctl 命令查看更详细的压缩统计信息：zramctl输出示例：NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT /dev/zram0 zstd 488M 4K 73B 12K 2 [SWAP]进阶操作：内核参数调优开启了 zRAM 后，Swap 变成了高速内存。因此，传统的 Linux 针对硬盘 Swap 设定的内核参数就不再适用了。需要对其进行调优。创建或编辑 sysctl 配置文件：sudo nano /etc/sysctl.d/99-zram.conf填入以下最佳实践参数：# 1. 提高使用 Swap 的积极性 (默认通常是 60) # 因为 zRAM 速度很快，我们希望系统更积极地把冷数据压缩到 zRAM 中，腾出物理内存给文件缓存。 # 推荐值：100 - 150 之间。 vm.swappiness = 150 # 2. 禁用页簇 (Page Cluster) # 传统的 Swap 每次会连带读取相邻的内存页（因为磁盘顺序读取比随机读取快）。 # 但 zRAM 是在内存中操作，连带读取反而会增加 CPU 计算解压的负担。 # 将其设置为 0，表示每次只交换需要的页面。 vm.page-cluster = 0 # 3. 调整缓存压力阈值 # 稍微降低系统回收 VFS 缓存（目录和 inode）的倾向。 vm.vfs_cache_pressure = 50保存文件后，应用内核参数使其立即生效：sysctl --system常见问题解答 (FAQ)Q1：我还需要保留硬盘的 Swap 文件/分区吗？答： 根据你的内存大小决定。如果你的内存极小（< 1GB），建议保留少量的硬盘 Swap 以防万一（内核会自动优…