如何在Linux中修改虚拟内存的换出权重 Linux调整swappiness参数的方法

如何在Linux中修改虚拟内存的换出权重 Linux调整swappiness参数的方法

系统教程

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

swappiness 不是“虚拟内存大小”,它只是内核决定多早、多积极地把内存页换出到 swap 的权重值。改它不会增加或减少 swap 空间,只改变策略。物理内存充足时,设低值(如 101)能明显减少硬盘抖动和延迟;设成 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 后丢失,仅用于测试。

Docker Desktop(linux)

当前 Docker 最新稳定版本之一,主要针对稳定性和兼容性进行了修复优化,适合生产环境与日常开发使用。该版本继续强化 AI 开发支持、容器日志管理以及 Docker Engine 的安全能力,对 Windows/macOS/Linux 平台兼容性进行了进一步优化。

下载

永久修改 swappiness(写入配置文件)

避免每次重启重设,需落盘到 sysctl 配置:

  • 编辑 /etc/sysctl.conf,追加一行:vm.swappiness = 10
  • 或更规范的做法:新建 /etc/sysctl.d/99-custom.conf,写入同一行(避免污染主配置)
  • 执行 sysctl -psysctl --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% 确信内存永不耗尽,否则不建议。

本文地址:https://www.sztg.com.cn/article/682188.html

如非特殊说明,本站内容均来自于网友自主分享,如有任何问题均请联系我们进行处理!

猜您喜欢