当前位置: 首页 > news >正文

Docker Compose 如何设置容器资源限制 memory 和 cpu

在 Docker Compose 中,通过 mem_limit 设置 512M 内存上限和 cpus 设置 1.5 个 CPU 核心,可有效防止容器占用过多宿主机资源导致 OOM Kill。

原因分析

Docker 容器默认没有资源限制,可以使用系统所有资源。如果不设置内存限制,容器会消耗宿主机最大内存直至触发 OOM(Out-of-Memory)异常,系统会开始杀死进程释放内存,包括 Dockerd 和其他应用程序。根据 2024 年 9 月 3 日的资料,对于 Linux 主机,如果重要系统进程被 Kill,会导致整个系统宕机。资源限制依赖 Linux 内核的 Cgroups(Control Groups)技术实现,通过 cgroups v2 中的 memory.max 接口写入字节数值来设置内存上限,例如 echo "536870912" > /sys/fs/cgroup/mygroup/memory.max 可将内存限制为 512MB(2025 年 11 月 20 日资料)。

解决方案:Docker Compose 内存限制配置

在 Docker Compose 文件中,内存限制有两种配置方式。对于单机 Compose 环境,应使用顶级 mem_limit 字段:version: '3.8',services: app: image: myimage,mem_limit: 512M。对于 Docker Swarm 集群模式,应使用 deploy.resources.limits:deploy: resources: limits: memory: 500M。还可以设置内存软限制--memory-reservation 256m,当宿主机内存紧张时容器优先被回收到该阈值。同时可配置--memory-swap 设置内存 +Swap 总限制,默认等于-m 的 2 倍,例如-m 512m --memory-swap 512m 表示不允许使用 Swap。

解决方案:Docker Compose CPU 限制配置

CPU 限制推荐使用--cpus 参数直接限制核心数,支持小数,例如 cpus: '1.5' 表示最多使用 1.5 个 CPU 核心。另一种方式是使用--cpu-shares 设置相对权重,默认值为 1024,例如--cpu-shares 512 表示权重减半。根据 2024 年 5 月 7 日资料,--cpu-period 参数指定容器对 CPU 使用的分配周期,最小值为 1000,最大值为 1000000,默认值为 100000 微秒;--cpu-quota 指定在该周期内进程最多可使用的 CPU 时间,例如--cpu-period 1000000 --cpu-quota 100000 表示 1 秒内容器使用 CPU 最长为 0.1 秒。在 Compose 文件中配置为:cpus: '1.5' 或 deploy: resources: limits: cpus: '1.5'(Swarm 模式)。

注意事项

第一,deploy.resources 仅在使用 Docker Swarm 模式时生效,若在普通 Docker Compose 运行环境中应改用顶级 mem_limit 和 cpus 字段,否则配置不生效。第二,设置资源限制时应考虑容器实际需求,避免设置过小导致容器无法正常运行,例如内存限制过小会触发 OOM Killed,容器状态变为 Exited。第三,执行 docker info 命令检查内核支持,如果禁用某项功能会看到警告如"WARNING: No swap limit support"。第四,--cpu-shares 只在 CPU 资源紧张时生效,当系统中只有一个容器运行时该参数配置没有意义。第五,对于存储限制,在 devicemapper 存储驱动下可通过 dm.basesize=20G 限制容器大小为 20GB,需定期监控磁盘使用情况。

参考来源

来源:阿里云开发者社区 - 配置 Docker 容器的 CPU 内存与磁盘 IO 资源限制(2023 年 10 月 31 日)

来源:Docker 官方文档 - Docker Compose 资源限制概述(2024 年 5 月 17 日)

来源:技术博客 - Docker 详解 CPU 资源限额配置(2024 年 5 月 7 日)

来源:Linux 内核文档 - cgroups v2 memory.max 配置示例(2025 年 11 月 20 日)

原文链接:https://www.zjcp.cc/ask/9747.html

http://www.jsqmd.com/news/756428/

相关文章:

  • 北京交通大学考研辅导班推荐:排名深度评测与选哪家分析 - michalwang
  • 从格式焦虑到自由:用Save Image as Type重新定义右键菜单的力量
  • AI编码代理深度测评:2025年实战能力、协作模式与风险应对
  • 告别Matlab?手把手教你用QT+开源库实现专业级频谱分析与跳频信号解析
  • 观察在流量高峰时段通过taotoken调用api的成功率变化
  • 北京电影学院考研辅导班推荐:排名深度评测与选哪家分析 - michalwang
  • 终极指南:如何用TegraRcmGUI简单快速破解你的Nintendo Switch
  • ALSA 专业术语 和 dai_link 分析
  • HeaderEditor终极实战指南:浏览器请求控制核心技术深度解析
  • [shell | 关闭端口 | lsof]
  • 山西大学考研辅导班推荐:排名深度评测与选哪家分析 - michalwang
  • DouyinLiveRecorder:40+平台直播录制神器,轻松保存每一场精彩直播
  • 如何3分钟搞定网易云音乐NCM文件解密:ncmdumpGUI终极指南
  • 如何用茉莉花插件10倍提升你的中文文献管理效率?终极解决方案指南
  • 2026 镇江黄金回收榜|福正美黄金回收位列榜一 - 福正美黄金回收
  • 有没有服务可以让手机号拨出时自动弹出企业名称?开通电话号码认证
  • 时序预测编码与实时循环学习的融合创新
  • 网易云音乐NCM文件终极解密指南:3步实现加密音乐无损转换
  • 天津工业大学考研辅导班推荐:排名深度评测与选哪家分析 - michalwang
  • 四川包钢H型钢,“成都H型钢市场用户满意优选品牌” - 四川盛世钢联营销中心
  • REFramework技术侦探:3个关键线索破解《生化危机2重制版》非光追版启动崩溃之谜
  • Claude桌面端增强工具:钩子机制实现AI助手本地化扩展
  • Super-Dev:一站式开发环境自动化工具链设计与实践
  • 武汉理工大学考研辅导班推荐:排名深度评测与选哪家分析 - michalwang
  • 避开坑位!调试UltraScale+ 40G以太网IP时,GT时钟共享的那些常见错误与排查方法
  • 如何快速配置自动化任务:面向新手的完整鼠标键盘录制工具指南
  • 天津大学考研辅导班推荐:排名深度评测与选哪家分析 - michalwang
  • 新手必看:在快马平台十分钟上手oh-my-openagent框架核心概念
  • 山东大学考研辅导班推荐:排名深度评测与选哪家分析 - michalwang
  • AMD Ryzen处理器终极调试指南:免费开源工具SMU Debug Tool详解