必须先swapoff再swapon -p设置优先级,因已启用的Swap无法动态修改;-p仅在启用瞬间生效,且需确保swap文件权限为0600;/etc/fstab中pri=须紧接sw后并用英文逗号分隔,否则加载失败。

swapon -p 设置优先级必须先 swapoff
已启用的 Swap 设备无法直接改 priority,swapon -p 只在启用瞬间生效。强行重复执行会报错:swapon: /dev/sdb1: swap area needs to be reinitialized。
- 必须先停用:
sudo swapoff /dev/nvme0n1p1 - 再以目标优先级启用:
sudo swapon -p 20000 /dev/nvme0n1p1 - 验证是否生效:
swapon --show=NAME,PRIORITY—— 第三列应显示你设的数值 - Swap 文件同理,但需确保权限为
0600,否则swapon拒绝挂载
/etc/fstab 中 pri= 的写法容易漏逗号
fstab 里 swap 行的 pri= 必须紧接在 sw 后、用英文逗号分隔,任何空格或顺序错误都会导致开机时 swap 加载失败或忽略优先级。
- ❌ 错误写法:
/dev/sdb1 none swap sw pri=10000 0 0(缺逗号) - ✅ 正确写法:
/dev/sdb1 none swap sw,pri=10000 0 0 - 修改后别急着重启,先运行
sudo swapon --verify或sudo mount -a测试语法 - 若 fstab 有误,系统可能卡在启动阶段,无法进入登录界面
多个 Swap 共存时优先级不是“非此即彼”
内核按 priority 从高到低填满设备,而不是只用最高那个。同 priority 则轮询写入——这点常被误读为“只走 SSD”,实际可能把 HDD 也拖进 I/O 瓶颈。
- SSD + HDD 共存时,不要都设
pri=32767;推荐梯度设置:pri=20000(SSD)、pri=100(HDD) - 设
pri=0的 swap 相当于“备用开关”,仅当所有高优先级 swap 耗尽且系统允许降级时才启用 - 未显式设置 priority 的设备默认为
-1,永远排最后,哪怕物理上是 NVMe - priority 和
vm.swappiness是两套独立机制:前者管“用哪个 swap”,后者管“要不要用 swap”
swap 优先级和 vm.swappiness 要配合调
只调高 priority 却不控 swappiness,可能导致 SSD swap 频繁写入,加速磨损;反之 swappiness 过低,再快的 swap 也闲置。
- 数据库/Redis 类服务:
vm.swappiness=1(极小交换意愿,但一旦触发就落在高性能 swap 上) - Java 应用较多的混合服务器:
vm.swappiness=10(允许冷页适度预换出) - 临时改:
sudo sysctl vm.swappiness=1;永久改:写入/etc/sysctl.conf并sudo sysctl -p - 注意:
swappiness=0不等于“禁用 swap”,而是在 OOM 前一刻才启用——此时 swap 已是最后防线,不能依赖它做日常缓存卸载


















