最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何配置 --memory-swap 限制容器交换分区避免宿主机夯死
时间:2026-07-26 08:33:48 编辑:袖梨 来源:一聚教程网
防止宿主机夯死的关键是成对设置--memory和--memory-swap以划定“内存+Swap”总边界:--memory=1g --memory-swap=1g禁用swap并快速OOM止损,--memory=1g --memory-swap=2g允许1GB swap仅适用于批处理,--memory-swap=-1绝对禁止;宿主机必须启用swap且内核支持cgroup swap控制。
要防止宿主机夯死,关键不是让容器多用 swap,而是用 --memory 和 --memory-swap 成对划清“内存 + swap”总边界,避免容器无节制耗尽宿主机全部物理内存和 swap 空间,从而触发 oom killer 杀掉 ssh、systemd 等关键进程。
必须成对设置 --memory 和 --memory-swap
这两个参数是硬绑定的,缺一不可:
- 单独设
--memory-swap会报错:--memory-swap requires --memory to be set -
--memory-swap值必须 ≥--memory,差值即为容器实际可用 swap 容量 - 实际可用 swap =
--memory-swap−--memory(结果必须 ≥ 0)
常见有效组合:
-
--memory=1g --memory-swap=1g→ swap = 0,超限立即 OOM,快速止损(推荐生产环境) -
--memory=1g --memory-swap=2g→ 最多用 1GB 物理内存 + 1GB swap(仅适用于可容忍延迟的批处理) -
--memory=1g --memory-swap=-1→ swap 不设上限,极易拖垮宿主机,生产环境绝对禁止
宿主机必须真实启用 swap
容器能否换出内存,完全取决于宿主机:
- 运行
swapon --show,确认有活跃 swap 分区或 swapfile - 若无输出,需手动创建并启用(例如):
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
- 建议 swap 容量为物理内存的 50%–100%,但单个容器的
--memory-swap不应超过宿主机 swap 总量的 70%
内核必须支持 cgroup swap 控制
很多云主机或精简系统默认禁用该功能,导致配置静默失效:
- 检查是否启用:
- cgroups v1:
ls /sys/fs/cgroup/memory/ | grep memsw(应有memory.memsw.limit_in_bytes) - cgroups v2:
ls /sys/fs/cgroup/ | grep swap(应有memory.swap.max)
- cgroups v1:
- 若不支持,需修改
/etc/default/grub:GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
然后执行
sudo update-grub && sudo reboot
验证配置是否真正生效
别只信 docker run 成功,要查内核级限制:
- 启动容器后,进入容器执行:
cat /sys/fs/cgroup/memory/memory.limit_in_bytes # 应等于 --memory 字节数 cat /sys/fs/cgroup/memory/memory.memsw.limit_in_bytes # 应等于 --memory-swap 字节数
- 若两者相等,说明 swap 已禁用;若后者更大,差值即为可用 swap 容量
- 也可用
docker stats <容器名> --no-stream查看 “MEM USAGE / LIMIT”,括号中显示的是 memory + swap 总用量
不复杂但容易忽略
相关文章
- 三角洲行动压水堆服务器室在何处 07-28
- 三角洲行动铁路通道何处 07-28
- 三角洲行动托卡马克数据中心在哪 07-28
- 三角洲行动后处理厂机房何在 07-28
- 梦幻西游女魃墓69级装备搭配 07-28
- 三角洲行动s10恢复训练任务指南 07-28