首页/云/Docker 容器速查/容器 swap 倾向 --memory-swappiness
资源与安全50 条

容器 swap 倾向 --memory-swappiness

控制容器匿名页换出倾向(0-100,越低越少用 swap):cgroup v2 环境该参数不生效,内存策略要以 --memory 与宿主 swap 配置为主。

Docker 容器速查云更新于 2026-10-13

交换倾向参数是什么

控制容器匿名页换出的倾向,取值从零到一百,越低越少使用交换空间。在较新的统一 cgroup 层级环境下该参数不生效,内存策略仍需以内存限额与宿主交换配置为主。

基本信息

语法--memory-swappiness=<0-100>
含义匿名页换出倾向,越低越少换出
读取inspect 里的对应字段,特殊值表示未设置
环境限制统一 cgroup 层级下不生效
关联参数内存限额与交换总量

典型使用场景

  • 延迟敏感服务减少换出以避免抖动
  • 排查参数写了却没有效果的情况
  • 核对容器实际生效的倾向值
  • 评估宿主交换策略与容器参数的组合行为
  • 容量规划时确认内存与交换的口径

设置与核对

设置与核对
docker run -d --memory=1g --memory-swappiness=10 --name cache redis:7-alpine
docker inspect -f '{{.HostConfig.MemorySwappiness}}' cache    # 核对生效值
docker info -f 'CgroupVersion={{.CgroupVersion}}'             # 先确认 cgroup 版本

取值与适用场景

取值含义适用场景
取零尽量不使用交换延迟极敏感的服务
较低值少换出在线服务
较高值多换出空闲优先的批处理
未设置使用系统默认无特殊要求
对延迟敏感的服务通常倾向于少换出;但要不要用交换首先取决于宿主策略与内存容量规划。
在统一 cgroup 层级下没有对应开关,写了也不会按预期生效,先确认 cgroup 版本。
交换总量还受交换上限参数与宿主系统级配置影响,只改这一项以为万事大吉是常见误判。
核对生效值时注意特殊取值代表未设置,这说明参数并没有真正写入。
同一宿主上不同容器可以有不同的倾向设置,但整体交换行为仍由宿主策略兜底。
内存压力大的场景下,减少换出会更容易触发内存不足终止,两种风险要权衡。
宿主没有配置交换空间时,倾向参数本身没有实际作用,排查这类问题要先确认宿主是否存在交换分区或交换文件。

易错点

  • 在统一 cgroup 层级下该参数不生效,先确认版本再排查
  • 交换总量还受其他参数与宿主配置影响,只改一项容易误判
  • 核对生效值时忽略特殊取值代表未设置,误以为配置已生效
  • 一味减少换出会更容易触发内存不足终止,需要权衡取舍

数据来源与参考

  • Docker 官方文档:Runtime options with Memory, CPUs, and GPUs(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌