内存与 OOM58 条

swap 设备优先级

多块 swap 用 pri 决定使用顺序:数值大的优先使用;swapon --priority 立即生效,fstab 里写 pri= 持久化。

什么是 swap 设备优先级

一台机器可以挂多块 swap 设备(分区、文件或 zram),内核按优先级决定使用顺序:数值大的先被使用,用满后再使用数值小的。未设置优先级时多个设备会被交替使用,性能特征变得不可预测——特别是把慢设备与快设备混用时表现更差。swapon --priority 可以立即设置,写入 fstab 的 sw,pri= 才能持久化。

基本信息

查看swapon --show 或 cat /proc/swaps
设置swapon --priority 10 <设备>
持久化/etc/fstab 中 sw,pri=10
取值方向数值越大越优先使用
未设置时多个设备轮询使用,优先级显示为负值
相关zram、swap 文件、vm.swappiness

典型使用场景

  • SSD 与机械盘混用:让 SSD 先承担换页,机械盘作为后备
  • zram 与磁盘 swap 配合:内存压缩设备设为高优先级,减少磁盘 IO
  • 多块交换分区规划的机器:让使用顺序与设备性能一致
  • 性能异常排查:确认是否因为慢设备被优先使用
  • 变更后核对:用 swapon --show 确认实际生效的优先级

查看与设置

查看与设置
swapon --show                            # 名称、类型、大小与优先级
cat /proc/swaps                          # 等价的内核视图
free -h | grep -i swap                   # 总量与已用
sudo swapon --priority 10 /dev/sdb2      # 立即调整优先级
sudo swapoff /dev/sdb2 && sudo swapon --priority 10 /dev/sdb2   # 让新优先级生效
# /etc/fstab 持久化:
# /dev/sdb2 none swap sw,pri=10 0 0
systemctl daemon-reload                  # fstab 变更后同步单元文件

优先级策略

设备组合建议优先级理由
zram + 磁盘 swapzram 更高内存压缩比磁盘快,减少 IO
SSD + HDDSSD 更高避免慢设备拖长换页时间
多块同型号盘按计划分配明确顺序,避免轮询不可预测
单块 swap无需设置不存在择优问题
fstab 在 systemd 环境中会生成对应单元,改动后建议执行 daemon-reload;同时改变既有设备的优先级需要先 swapoff 再 swapon。
swapoff 会把该设备上的数据全部换回内存或迁移到其他 swap,内存紧张时执行可能直接触发 OOM,操作前先确认可用内存充足。
zram 与磁盘 swap 并用时要留意:zram 本身占用内存,压缩比下降或数据量增长时会加重内存压力,因此它的优先级策略需要与内存水位一起观察。

易错点

  • 未设优先级时多个设备会被轮流使用,性能特征不稳定,快慢设备混用的影响尤其明显
  • 把慢设备设成高优先级会拖慢换页,SSD 与 zram 通常应排在磁盘 swap 之前
  • 对已有 swap 改优先级后没有 swapoff/swapon,运行时仍按旧顺序使用,验证时会误判未生效
  • 在内存吃紧时执行 swapoff 造成 OOM:操作前必须先确认可用内存是否够容纳被迁移的页

数据来源与参考

  • util-linux 文档 swapon(8)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌