首页/云/Docker 容器速查/docker run --memory-swap 交换空间控制
资源与安全50 条

docker run --memory-swap 交换空间控制

控制内存加交换的总量:--memory-swap 等于 --memory 时禁用交换;不设置时默认允许使用与内存等量的交换。

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

--memory-swap 的语义

--memory-swap 控制内存加交换空间的总量,语义是总量而不是单独的交换量:把它设成与 --memory 相同即禁用交换,不设置时默认允许使用与内存等量的交换。延迟敏感服务通常禁用交换,批处理类可以保留交换以提升内存利用率。

基本信息

语义memory-swap = 内存 + 交换 的总上限
禁用交换--memory-swap 与 --memory 取相同值
默认行为未设置时允许等量交换
特殊值-1 表示不限制交换用量
核对docker inspect 的 HostConfig.MemorySwap

典型使用场景

  • 延迟敏感服务:禁用交换,避免换入换出带来的抖动
  • 批处理任务:保留交换,提高内存利用率而不必预留大内存
  • 容量受限的宿主:限制总量避免单个容器把交换吃满
  • 稳定性验证:确认交换参数与宿主交换配置的组合行为
  • 迁移老业务:把宿主的交换策略对齐到容器编排里

禁用与保留交换

禁用与保留交换
# 禁用交换:内存与总量都设 512m
docker run -d --memory=512m --memory-swap=512m --name no-swap app/api:1.4.2
# 允许 512m 内存加 512m 交换
docker run -d --memory=512m --memory-swap=1g --name with-swap app/api:1.4.2
docker inspect -f '{{.HostConfig.Memory}}/{{.HostConfig.MemorySwap}}' with-swap

参数组合对照

场景参数组合效果
禁用交换memory-swap 等于 memory不会换出到磁盘
允许等量交换只设 memory最多可用等量交换
留出额外交换memory-swap 大于 memory总量等于两者之和
不限制交换memory-swap=-1特殊场景才用
总量写小于内存会被拒绝(-1 除外),配置前先把总量算清楚再写进编排。
宿主交换空间不足时容器仍会被 OOM,交换参数不等于额外的物理内存,容量规划不能依赖它。
延迟敏感服务通常禁用交换以避免抖动;批处理类保留交换往往能提高利用率,选型取决于业务对延迟的容忍度。
宿主的交换策略与 cgroup 版本都会影响实际行为,改动后要观察一段真实负载再下结论,不要只看压测瞬间的表现。
交换参数与内存软限、OOM 优先级共同决定压力下的表现,单独调一个参数很难得到预期结果。

易错点

  • 总量写成小于内存会被拒绝(-1 除外),先算清总量再写
  • 宿主交换空间不足时容器仍会被 OOM,交换参数不等于额外内存
  • 只改容器参数而不看宿主交换配置,压力下的实际行为与预期不符
  • 把交换当成延迟优化的万能手段,内存换入换出反而放大抖动

数据来源与参考

  • Docker 官方 CLI 参考:docker run --memory-swap(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌