跳至主要內容

swap与zram配置

Kamimika...大约 3 分钟LinuxLinux笔记

通常为了避免内存不足导致机器卡死,可以在机器上设置 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
上次编辑于:
贡献者: wzh656
评论
  • 按正序
  • 按倒序
  • 按热度