swappiness=1 后仍然频繁 swap 的几种隐藏内存压力来源

发布时间 - 2026-01-21 00:00:00    点击率:
swappiness=1不能禁用Swap,极端内存压力下内核仍会换出不活跃匿名页以避免OOM;真正内存压力信号是pgscan_direct/pgsteal_direct持续非零、r值长期超CPU核数且free

swappiness=1 并不等于“禁用 Swap”

很多人误以为把 swappiness 设为 1 就能彻底避免 Swap 使用,其实不是。Linux 内核在极端内存压力下仍会换出匿名页——哪怕只有一丁点空闲内存被耗尽,内核就会触发 direct reclaim,并在必要时把不活跃匿名页写入 Swap。这是保障系统不直接 OOM 的最后一道缓冲机制,无法绕过。

内存回收行为比 Swap 更早暴露压力

Swap 占用高常常是结果,不是原因。真正关键的信号藏在内存回收日志里:

  • 持续非零的 pgscan_directpgsteal_direct(查 /proc/vmstat):说明进程正在同步等待内存回收,已进入高危状态;
  • r 长期大于 CPU 核数 + free 持续低于 5%(用 vmstat 1 观察):代表就绪队列积压、可用内存严重不足;
  • dmesg | grep -i "invoked oom-killer" 出现但未 kill 进程:说明内核已判定内存临界,只是暂时靠 Swap 缓了一步。

文件缓存与 slab 占用挤压真实可用内存

即使 free -h 显示还有几 GB “used”,MemAvailable 才是系统真正能立刻分配给新进程的内存。以下情况会让它远低于预期:

  • 大量 page cache 被保留:比如频繁读大文件、日志轮转不及时、备份任务堆积;
  • slab 内存膨胀:尤其是 SReclaimable(可回收的 dentry/inode 缓存)过高,常见于高并发小文件访问或 NFS 挂载场景

  • vfs_cache_pressure 默认值 100 太激进:它控制的是缓存回收强度,值越高越难释放 inode/dentry,反而推高 Swap 倾向。

容器与 cgroup 环境下的“隐形超分”

在 Docker 或 Kubernetes 中,Swap 行为更隐蔽:

  • 宿主机 swappiness=1,但容器没设 --memory-swappiness,它会继承宿主机值,而 cgroup v1 下 swap 限额默认不限制;
  • 多个容器共享同一台机器,各自内存 limit 总和超过物理内存,但没有统一 swap 限制,内核只能靠换出缓解;
  • 查看 cat /sys/fs/cgroup/memory/machine.slice/memory.stat 等路径,常发现 total_swap 字段非零,说明后台服务(如 systemd-journald、dbus)也在悄悄使用 Swap。


# linux  # node  # docker  # app  # mac  # ai  # kubernetes  # 继承  #   # 并发  # 换出  # 仍会  # 的是  # 这是  # 有一  # 就会  # 尤其是  # 就能  # 多个  # 才是 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: javascript基于原型链的继承及call和apply函数用法分析  教你用AI将一段旋律扩展成一首完整的曲子  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Laravel如何配置和使用缓存?(Redis代码示例)  Laravel如何使用.env文件管理环境变量?(最佳实践)  利用vue写todolist单页应用  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  php json中文编码为null的解决办法  PHP 500报错的快速解决方法  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  网站建设要注意的标准 促进网站用户好感度!  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  JavaScript常见的五种数组去重的方式  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  Laravel观察者模式如何使用_Laravel Model Observer配置  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  如何确认建站备案号应放置的具体位置?  如何快速搭建高效服务器建站系统?  如何正确下载安装西数主机建站助手?  HTML 中如何正确使用模板变量为元素的 name 属性赋值  微信小程序 配置文件详细介绍  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  android nfc常用标签读取总结  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Laravel如何自定义分页视图?(Pagination示例)  动图在线制作网站有哪些,滑动动图图集怎么做?  如何用y主机助手快速搭建网站?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  如何在橙子建站上传落地页?操作指南详解  Laravel如何实现本地化和多语言支持?(i18n教程)  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  清除minerd进程的简单方法  详解Android——蓝牙技术 带你实现终端间数据传输  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  如何破解联通资金短缺导致的基站建设难题?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Java解压缩zip - 解压缩多个文件或文件夹实例  利用 Google AI 进行 YouTube 视频 SEO 描述优化  如何挑选优质建站一级代理提升网站排名?  如何在IIS7上新建站点并设置安全权限?  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  *服务器网站为何频现安全漏洞?  如何快速打造个性化非模板自助建站?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?