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

Docker 容器如何实现资源限制(如 CPU 和内存)

在 Docker 中,可以通过设置容器运行参数,限制容器的 CPU、内存等资源使用量,从而防止某个容器占用过多资源,影响其他服务运行。


一、内存限制(Memory)

限制最大内存使用:

docker run -m 512m --memory-swap 512m ubuntu
参数说明
-m--memory设置最大可用物理内存(如 512m, 2g
--memory-swap包含内存+交换分区(swap)的总限制
--memory-reservation软限制(仅在系统压力大时才强制限制)

💡 推荐 --memory-swap 值与 --memory 相同,避免 swap 占用过多。


二、CPU 限制

Docker 默认不会限制 CPU,但你可以通过如下方式控制:

方法 1:限制可用 CPU 核心数

docker run --cpuset-cpus="0,1" ubuntu

表示容器只能使用第 0 和 1 核心。


方法 2:设置 CPU 份额(相对权重)

docker run --cpu-shares=512 ubuntu
  • 默认是 1024
  • 多个容器分配 CPU 份额:容器 A 是 512,容器 B 是 1024,B 获取 CPU 的概率是 A 的 2 倍

方法 3:控制 CPU 使用比例

docker run --cpus="1.5" ubuntu

表示最多使用 1.5 核心(如果宿主机是多核,可跨核调度)。


三、综合示例(限制 CPU + 内存)

docker run -d \--name limited_container \-m 512m --memory-swap=512m \--cpus="1.0" \ubuntu sleep 1000
  • 限制最大 512MB 内存
  • 限制最多 1 个 CPU 核心

四、查看资源限制

docker inspect 容器ID

查看 JSON 中的 "HostConfig""Memory""NanoCpus" 等字段。

或使用命令:

docker stats 容器名

实时查看容器的 CPU、内存使用情况。


五、推荐实践

建议说明
限制生产容器的内存和 CPU防止容器 OOM、抢占系统资源
多容器部署时使用 --cpus精细控制资源分配
--memory-swap=memory 推荐设置一致避免 swap 被滥用
使用 Kubernetes 时通过资源 Request / Limit替代 Docker 参数方式
docker stats 做定期监控或报警配合 cadvisor / Prometheus

六、进阶控制(cgroups)

Docker 本质上是使用 Linux 的 cgroups 控制组 实现资源限制的,可以通过如下命令查看:

cat /sys/fs/cgroup/memory/docker/<container_id>/memory.limit_in_bytes

若你使用 containerd / podman 等容器引擎,也会采用类似方式控制资源。


七、总结图

docker run \--cpus="1.5" \--memory="1g" \--memory-swap="1g" \your-image

限制容器最大使用 1.5 核心、1GB 内存,不允许超额。


如你需要:

  • docker-compose.yml 中配置资源限制
  • Kubernetes 中 Pod 的资源 request/limit
  • 或资源超限后的报警或自恢复机制设计
http://www.dtcms.com/a/265418.html

相关文章:

  • MacOS Safari 如何打开F12 开发者工具 Developer Tools
  • 【C++】状态模式
  • 好用的自带AI功能的国产IDE
  • Go与Python爬虫对比及模板实现
  • 信刻光盘安全隔离与文件单向导入/导出系统
  • 高压电缆护层安全的智能防线:TLKS-PLGD 监控设备深度解析
  • NVIDIA Spectrum-3 SN4000 系列SN4000 SN4000 系列速度高达 400Gb/秒的现代横向扩展分布式数据中心应用提供支持。
  • 站在 Java 程序员的角度如何学习和使用 AI?从 MVC 到智能体,范式变了!
  • 使用Mac自带的图像捕捉导出 iPhone 相册
  • Mac电脑 虚拟机 VMware Fusion13
  • 办公文档批量打印器 Word、PPT、Excel、PDF、图片和文本,它都支持批量打印。
  • AI 如何批量提取 Word 表格中的字段数据到 Excel 中?
  • docker-compose一键部署全栈项目。springboot后端,react前端
  • 前端框架中注释占位与Fragment内容替换的实现与优化
  • 按键精灵 安卓脚本开发:游戏实战之自动切换账号辅助工具
  • 回归模型评价指标
  • 板凳-------Mysql cookbook学习 (十一--------3)
  • c# [AllowAnonymous] API 匿名访问
  • 微软发布突破性医疗AI系统
  • 基于 Elasticsearch 实现地图点聚合
  • thinkphp中间件
  • Redis—哨兵模式
  • OpenCV篇——项目(二)OCR文档扫描
  • DHCP中继及动态分配
  • 万字详解AVL树
  • 【指针(4)-- 深入理解指针】
  • “AI+”赋能千行百业创新融合的应用场景
  • UE5音频技术
  • 【动态规划】P11188 「KDOI-10」商店砍价|普及+
  • 钉钉企业应用开发系列:前端实现自定义右上角菜单(dd.http + Vue3)