
swap与zram配置
...大约 3 分钟
通常为了避免内存不足导致机器卡死,可以在机器上设置 zram(内存压缩)和 swap(将硬盘当内存用,相当于虚拟内存)。
核心逻辑是:把内存的一部分划为支持极速压缩的 zram(赋予高优先级),同时保留一个磁盘 Swap 文件作为兜底(赋予低优先级)。系统会优先把冷数据压缩放进内存里,实在塞不下了才会写入硬盘。
以 Debian 13 (Trixie) 为例,设置 zram 和磁盘 Swap 的现代实践是使用官方 systemd 团队维护的 systemd-zram-generator,而不是老旧的 zram-tools 脚本。
1. 配置 zram
1.1. 安装 zram 生成器
sudo apt update
sudo apt install systemd-zram-generator
1.2. 创建配置文件
sudo nano /etc/systemd/zram-generator.conf
写入以下内容:
[zram0]
# 设置 zram 的大小。
# 现代推荐:ram / 2 (物理内存的一半),或者直接填 ram (1:1大小,不用担心,它只在实际写入时才占用物理内存)
zram-size = ram / 2
# 压缩算法。zstd 是现代内核的最佳选择,压缩比极高且速度很快。
# (如果追求极致低延迟也可以用 lz4,但通常 zstd 综合表现更好)
compression-algorithm = zstd
# 优先级设置。范围最大到 32767,设置成 100 足以碾压普通磁盘 Swap (默认是 -2)。
swap-priority = 100
# 明确声明类型为 swap
fs-type = swap
1.3. 启动并应用 zram
sudo systemctl daemon-reload
sudo systemctl start [email protected]
2.配置兜底的磁盘 Swap
2.1. 创建 Swap 文件
以创建 2GB 的 Swap 文件为例:
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
如果是 Btrfs 文件系统(Debian 13 常见): Btrfs 需要特殊命令关闭写时复制(CoW)功能:
sudo btrfs filesystem mkswapfile --size 4g /swapfile
2.2. 启用 Swap 文件
sudo swapon /swapfile
2.3. 写入开机挂载并设置低优先级
sudo nano /etc/fstab
在文件末尾添加一行,显式指定其优先级为 10(远低于 zram 的 100):
/swapfile none swap defaults,pri=10 0 0
3. 内核参数调优
传统的 Swap 教程会把 swappiness 调低(比如 10),但在使用 zram 时相反,由于 zram 是在内存里进行压缩,速度极快,我们希望内核积极地把不常用的匿名页压缩进 zram,从而腾出宝贵的物理内存给文件缓存。
创建一个专门的内核参数配置文件:
sudo nano /etc/sysctl.d/99-zram-tweaks.conf
粘贴以下现代内核推荐参数:
# 提高积极度。默认是60,使用 zstd 算法的 zram 推荐设置为 100 到 180 之间。
vm.swappiness = 100
# zram 是基于内存的,随机读写性能极高,不需要像磁盘那样预读相邻页面。
# 设置为 0 可以消除无意义的预读开销,降低延迟。
vm.page-cluster = 0
# 降低水位线缩放因子,配合高 swappiness 避免内存突发分配时的卡顿
vm.watermark_scale_factor = 125
vm.watermark_boost_factor = 0
保存退出后,立即应用这些内核参数:
sudo sysctl --system
4. 验证
使用以下命令检查你的配置是否生效:
4.1. 查看 Swap 优先级队列
sudo swapon --show
4.2. 查看 zram 的详细压缩状态
sudo zramctl
