vm.swappiness决定内核换出匿名页的激进程度,值0–100,影响堆、栈等匿名内存换入换出时机,不控制page cache;默认60表示剩余内存低于40%即开始换出,设1则仅oom边缘启用。

vm.swappiness 值决定内核换出匿名页的激进程度
这个参数不控制“是否用 Swap”,而是控制“多早、多频繁地把匿名内存(堆、栈、私有 mmap)往 Swap 里扔”。它只影响匿名页,page cache(文件缓存)完全不受影响。值范围是 0–100,但关键不是数字本身,而是它触发换出的内存水位逻辑:默认 60 意味着当系统剩余内存低于约 40% 时,内核就开始主动换出;设为 1 则几乎只在 OOM 边缘才动 Swap。
不同负载场景下该设多少
数据库(MySQL/PostgreSQL)必须压低:vm.swappiness=1 或 0。否则内核可能把热数据页换出,导致查询陡增 I/O 延迟,甚至引发主从延迟或连接超时。容器密集型节点(如 Kubernetes worker)建议设为 0:cgroup 内存限制已足够精细,Swap 反而干扰 OOM Killer 判定,造成 Pod 非预期驱逐。桌面环境可设 60–80,让后台服务适当驻留,避免前台应用卡顿——但这依赖 SSD,HDD 上设高值只会拖慢整体响应。
临时改和永久生效的区别与风险
临时调整用 sysctl vm.swappiness=10,立即生效,重启即丢。永久写入需追加 vm.swappiness=1 到 /etc/sysctl.conf 或独立文件如 /etc/sysctl.d/99-swap.conf,再执行 sysctl -p 加载。注意:若系统启用了 systemd-sysctl,某些发行版(如较新 Ubuntu/CentOS)会忽略 /etc/sysctl.conf,只读 /etc/sysctl.d/*.conf;直接改 /proc/sys/vm/swappiness 文件虽快,但不推荐——它绕过内核校验,且无法持久。
调完怎么确认它真起作用了
别只看 free -h 里 Swap used 多少,那只是结果,不是原因。先查当前值:cat /proc/sys/vm/swappiness;再用 swapon --show 确认 Swap 设备状态;真正要盯的是换页行为:grep -i "pgpgin\|pgpgout" /proc/vmstat,如果 pgpgout 持续增长(比如每秒 >100),说明内核正高频换出,结合 vmstat 1 观察 si/so 列,>0 就是 Swap 在干活。此时若物理内存仍充裕(free -h 显示 available >30%),基本能断定 swappiness 设太高了。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











