swappiness 是内核换出内存页到 swap 的权重值,非虚拟内存大小;设为1比0更稳妥,推荐值10或1;查看用 cat /proc/sys/vm/swappiness,临时改用 echo 或 sysctl -w,永久改写入 /etc/sysctl.d/。

swappiness 不是“虚拟内存大小”,它只是内核决定多早、多积极地把内存页换出到 swap 的权重值。改它不会增加或减少 swap 空间,只改变策略。物理内存充足时,设低值(如 10 或 1)能明显减少硬盘抖动和延迟;设成 0 并不等于禁用 swap,而是在极端内存压力下才启用——但多数现代内核(3.5+)对 0 有特殊处理,反而可能引发意外行为,推荐用 1 替代。
查看当前 swappiness 值
最直接的方式是读取 /proc/sys/vm/swappiness:
cat /proc/sys/vm/swappiness
输出类似 60(Ubuntu 默认)、30(CentOS 8 默认)或 20(某些云厂商预置值)。这个值反映当前生效的权重,不是配置文件里的注释值。
临时修改 swappiness(重启失效)
适合验证效果或紧急调优,必须 root 权限:
-
echo 10 > /proc/sys/vm/swappiness—— 最简方式,但需注意重定向权限 -
sysctl -w vm.swappiness=10—— 更安全,会做基本校验 - 执行后立即生效,无需重启服务或内核
注意:sysctl -w 修改的值在下次 reboot 后丢失,仅用于测试。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
永久修改 swappiness(写入配置文件)
避免每次重启重设,需落盘到 sysctl 配置:
- 编辑
/etc/sysctl.conf,追加一行:vm.swappiness = 10 - 或更规范的做法:新建
/etc/sysctl.d/99-custom.conf,写入同一行(避免污染主配置) - 执行
sysctl -p或sysctl --system加载新配置
如果系统使用了云厂商插件(如阿里云 ACS-ECS-SwapConfig),它可能已将配置写入 /etc/sysctl.d/99-apsara-sysctl.conf,优先检查该路径而非盲目修改 sysctl.conf。
swappiness=0 和 swappiness=1 的实际差异
文档常写“0 表示禁用 swap”,但这是过时理解。自 Linux 3.5 起:
-
vm.swappiness = 0:内核跳过常规 page reclaim 中的 swap 尝试,仅在 OOM 前的最后阶段才考虑换出——但该逻辑不稳定,部分场景下可能导致 kswapd 活跃度异常升高 -
vm.swappiness = 1:保留最小换出路径,既避免无谓 swap,又维持内存回收机制完整性,Red Hat 和 Ubuntu 官方文档近年均倾向推荐此值 - 不要为了“彻底不用 swap”强行设
0,尤其在生产服务器或容器密集环境
真正需要禁用 swap,应配合 swapoff -a 并从 /etc/fstab 移除 swap 条目——但除非你 100% 确信内存永不耗尽,否则不建议。

















