swapon -p 参数取值范围为0到32767,数值越大优先级越高,内核按优先级从高到低依次使用swap设备;同优先级则轮询使用,且需确保swap已关闭后再设置。

swapon -p 参数的取值范围和实际效果
swapon 命令的 -p 选项只接受 0 到 32767 的整数,超出会报错:swapon: invalid priority '32768'。优先级数字越大,内核越倾向于先使用该 swap 设备(或文件),但注意:这不等于“强制只用这个”,而是调度时的权重参考。多个 swap 设备存在时,内核按优先级从高到低依次填满;同优先级则轮询使用。
临时设置 swap 优先级的正确写法
执行 swapon -p 前必须确保目标 swap 已关闭(swapoff),否则会提示:swapon: /dev/sdb1: swap area needs to be reinitialized。
- 先停用:
sudo swapoff /dev/sdb1 - 再启用并设优先级:
sudo swapon -p 20000 /dev/sdb1 - 验证是否生效:
swapon --show中的PRIORITY列应显示 20000
如果 swap 是文件(如 /swapfile),同样适用,但需确保文件权限为 0600,否则 swapon 会拒绝挂载。
/etc/fstab 中配置 pri= 的常见错误
fstab 条目中优先级必须写在 sw 后面、用英文逗号分隔,且不能有空格。错误写法会导致开机时 swap 加载失败或忽略优先级:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- ❌ 错误:
/dev/sdb1 none swap sw,pri = 10000 0 0(等号前后有空格) - ❌ 错误:
/dev/sdb1 none swap sw pri=10000 0 0(缺少逗号) - ✅ 正确:
/dev/sdb1 none swap sw,pri=10000 0 0
修改后建议运行 sudo mount -a 测试语法,而不是直接重启——若 fstab 有误,可能卡在启动阶段。
优先级设太高反而引发问题的场景
把某个 swap 设备优先级设为 32767 并不总是最优。比如你有一块 SSD swap 和一块 HDD swap,都设成 32767,内核会轮询写入,导致 HDD 成为 I/O 瓶颈;而若只给 SSD 设 32767、HDD 设 0,则 HDD swap 实际永不启用(除非 SSD swap 耗尽且系统允许降级使用)。
更稳妥的做法是拉开梯度:SSD swap 设 pri=20000,HDD swap 设 pri=1000,留出中间空间便于后续扩容或调试。另外,swappiness(/proc/sys/vm/swappiness)值仍会影响整体 swap 使用倾向,它和 swap 优先级是两个独立控制维度,别混淆。










