You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux中vm.swappiness是动态属性吗?修改后仍用swap需重启吗?

关于vm.swappiness修改后仍有Swap占用的问题解答

首先明确说:完全不需要重启机器或者进程,你的修改已经立即生效了。下面给你拆解背后的逻辑,以及为什么还能看到Swap被占用:

先纠正一个常见误解:vm.swappiness不是“触发Swap的内存阈值”

你之前以为原设置60意味着内存用到100GB就开始交换,这个理解是错的。vm.swappiness其实是内核在内存回收时,倾向于使用Swap的权重值:

  • 数值越低,内核越优先回收页缓存(比如磁盘缓存),尽量不碰Swap
  • 数值越高,内核越愿意把不常用的匿名内存页(比如进程的堆、栈)换出到Swap
  • 0表示内核除非物理内存完全耗尽,否则绝不使用Swap;100表示内核会尽可能多的使用Swap

所以它和你内存占用到多少百分比没有直接关联,这是很多人容易搞混的点。

为什么修改后Swap还是被占用?

你的echo 1 > /proc/sys/vm/swappiness(注意你命令里多了个尾斜杠,正确路径是/proc/sys/vm/swappiness)执行后,内核马上就会采用新的策略,但已经换出到Swap里的内存页,内核不会主动把它们换回来——除非这些页面被进程再次访问,或者物理内存有大量空闲时,内核才会逐步把Swap里的内容换回到物理内存。

除此之外,哪怕swappiness设为1,在某些场景下内核还是可能会用Swap:比如物理内存出现短暂的峰值,或者某些进程的内存页长期未被访问,内核还是会选择把它们换出去,只是概率比之前低很多。

如何验证修改是否生效?

执行cat /proc/sys/vm/swappiness,如果输出是1,说明你的设置已经生效了,不需要任何重启操作。

如果想主动清理已有的Swap占用(可选)

如果你确实想把Swap里的内容全部换回物理内存,可以执行:

swapoff -a && swapon -a

⚠️ 注意:执行这个命令前,必须确保你的物理内存有足够的空闲空间(要能容纳当前Swap里所有的数据),否则会导致系统内存不足,触发OOM(内存溢出)杀死进程。

总结

  • 修改vm.swappiness是即时生效的,无需重启机器或进程
  • 已存在的Swap占用不会自动消失,属于正常现象
  • 后续内核会根据新的swappiness值,大幅降低使用Swap的倾向

内容的提问来源于stack exchange,提问作者ffff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:52:30