当前位置: 首页 > 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.dtcms.com/a/324460.html

相关文章:

  • Go语言--语法基础8--函数定义与调用--错误处理
  • Java学习第一百二十三部分——HTTP/HTTPS
  • 基于VuePress2开发文档自部署及嵌入VUE项目
  • 【RH134知识点问答题】第 4 章 归档和传输文件
  • 【浮点数存储】结构、精度说明
  • 联邦学习之------VT合谋
  • Pico+unity VR入门开发超详细笔记2025
  • 人形机器人强化学习入门实践1part
  • stm32没有CMSIS文件
  • Redis如何实现一个分布式锁?
  • 第4章 程序段的反复执行3 do-whiile语句P139练习(题及答案)
  • [Linux]学习笔记系列 -- [arm][lib]
  • C++的嵌套结构体
  • Deep Learning MNIST手写数字识别 Mac
  • 【从源码角度深度理解 CPython 的垃圾回收机制】:第2课循环引用:标记清除-分代回收
  • 7.企业级AD活动目录的备份与恢复策略
  • 【celeba】-数据集的介绍
  • 驱动电路设计
  • Ollama+Deepseek+Docker+RAGFlow打造自己的私人AI知识库
  • 【软件测试】性能测试 —— 工具篇 JMeter 介绍与使用
  • AI质检数据准备利器:基于Qt/QML 5.14的图像批量裁剪工具开发实战
  • 升级 JDK 17 碰到的请求 https 问题
  • 从0开始的中后台管理系统-5(userList页面功能实现)
  • 自测电脑有没有木马
  • 深度学习周报(8.4~8.10)
  • 使用binutils工具解析目标文件符号表(叁)
  • Datawhale AI夏令营 多模态RAG环境问题
  • 海关 瑞数 失信企业 逆向 分析 后缀 rs
  • es查询小结
  • CSS优先级、HTTP响应状态码