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

Docker-04:CGroups资源控制组

在 Docker 技术中,Cgroups(Control Groups) 是 Linux 内核提供的资源隔离与管理机制,用于限制、分配和监控进程组的硬件资源(如 CPU、内存、磁盘 I/O 等)。它通过层级化的控制组实现对容器资源的精细化控制,是 Docker 实现资源隔离的核心技术之一。

一、CGroups的原理

1.分层控制组结构

Cgroups 通过虚拟文件系统(通常挂载于 /sys/fs/cgroup/)管理资源,每个子目录代表一个控制组(Control Group)。控制组按树形层级组织,子组继承父组的资源限制,并支持自定义配额。

示例层级:

·/sys/fs/cgroup/cpu/docker/容器ID/

·/sys/fs/cgroup/memory/docker/容器ID/

2.子系统(subsystems)

每个子系统负责一类资源的控制,docker常用的子系统包括:

·cpu:限制CPU使用率(配额、权重)

·memory:限制内存用量,触发oom(内存溢出)时终止进程

·blkio:限制块设备I/O

·cpuset:绑定进程到特定CPU核或内存节点

·devices:控制设备访问权限

·net_cls:标记网络数据包,配合浏览控制工具限流

3.资源限制机制

通过配置文件动态调整参数(如 cpu.cfs_quota_us 设置时间片配额),进程加入控制组后,其资源消耗受组内配置约束。例如:

·向asks 文件写入进程 PID 将其纳入控制组。

·资源超限时(如内存超限),内核触发回收或终止进程。

4.Cgroups v1与V2的演进

V1:各子系统独立管理,灵活性高但配置复杂,易出现冲突。

V2:统一层级结构,简化管理并增强一致性(如单一 cgroup.controllers 文件)。

二、Cgroups在docker中的作用

1.资源限制:防止单个容器耗尽宿主机资源(如 CPU 占用 100% 或内存泄漏)。

2.优先级分配:通过权重(如 cpu.shares)分配资源。例如:高优先级容器可获更多 CPU 时间片。

3.资源统计:实时监控资源使用量(如 memory.usage_in_bytes),为计费或调度提供数据。

4.隔离性:结合 Namespace 实现进程、网络、文件系统的全面隔离,构成容器安全边界。

三、实例:使用Cgroups限制docker容器的CPU资源

场景描述:

限制一个 Redis 容器最多使用 1 个 CPU 核心的 50%

步骤:

1.启动容器并设置限制

通过 Docker 命令指定资源参数:

   docker run -d --name=redis --cpus=0.5 redis:alpine

2.Cgroups自动生成

Docker 在 /sys/fs/cgroup/cpu/docker/<容器ID>/ 目录下创建控制组,并写入参数:

·cpu.cfs_period_us:CPU 周期(默认 100,000 微秒 = 100ms);

·cpu.cfs_quota_us:容器在周期内最大可使用时间(50% → 50,000 微秒)。

   # 查看配置cat /sys/fs/cgroup/cpu/docker/<容器ID>/cpu.cfs_quota_us# 输出:50000

3.效果验证

1)容器内进程的 CPU 使用率被限制在 50% 以内(通过 top 命令观察)。

2)若进程试图超限,Linux 内核会将其挂起直至下一个周期。

四、总结

1.原理核心:Cgroups 通过层级化的控制组和子系统,以配置文件动态约束进程资源。

2.核心作用:保障容器间资源公平性、隔离性及宿主机的稳定性。

3.演进趋势:Cgroups v2 通过统一层级简化管理,逐渐成为主流。

http://www.lryc.cn/news/616307.html

相关文章:

  • 【代码随想录day 15】 力扣 404. 左叶子之和
  • 部署一个免费开源的博客系统
  • OpenAI正式发布GPT-5:迈向AGI的关键一步
  • 【走进Docker的世界】深入理解Docker网络:从模式选择到实战配置
  • TF-IDF提取关键词(附实战案例)
  • 【RocketMQ 生产者和消费者】- ConsumeMessageConcurrentlyService 并发消费消息
  • 【嵌入式硬件实例】-555定时器PWM调光电路
  • 智慧社区(十一)——Spring Boot 实现 Excel 导出、上传与数据导入全流程详解
  • 计算机网络:路由聚合的注意事项有哪些?
  • RabbitMQ面试精讲 Day 18:内存与磁盘优化配置
  • ROS2 QT 多线程功能包设计
  • 使用 Docker-Compose 部署 Redis 三主三从集群(含 Exporter 监控)
  • openresty-lua-redis案例
  • 高标准农田建设—用ZDM画钢筋图并标注
  • BLDC直流无刷电机工作原理
  • 【无标题】消息队列(Message Queue)是一种**进程间通信(IPC)机制
  • VBA即用型代码手册:段落Paragraphs
  • GPT-5与中国AI发展(DeepSeek R1视角)
  • 补卡day16
  • Django @login_required实现登陆认证
  • A#语言详解
  • Redis - 使用 Redis HyperLogLog 进行高效基数统计
  • 安全生产基础知识(一)
  • django基于Python的设计师作品平台的数据可视化系统设计与实现
  • 音视频学习(五十二):ADTS
  • 集成电路学习:什么是Parameter Server参数服务器
  • 比特币现货和比特币合约的区别与联系
  • 联邦学习之------VT合谋
  • 刑法视野下的虚拟财产属性争议:法律风险与市场潜力解析
  • 机器学习——TF-IDF 衡量词语在文档中重要程度