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

Docker容器资源控制--CGroup

目录

一、CGroups的含义

二、CGroup的功能和特点

1、CGroups的主要功能

2、CGroups的特点

三、实训

1、利用CGroups实现CPU资源控制

2、利用CGroups实现内存资源控制

3、利用CGroups实现磁盘I/O控制


一、CGroups的含义

        CGroups是Linux内核提供的一 种可以限制单个进程或者多个进程所使用资源的机制,可以对 CPU、内存和磁盘I/O等资源实现检制。Docker可使用CGroups提倡的资源限制功能来完成CPU、内存等部分的资源控制。

        CGroups提供了对进程进行分组化管理的功能和接口的基础结构,内存或磁盘I/O的分配控制等具体的资源管理功能是通过对进程进行分组化管理来实现的。这些具体的资源管理功能称为CGroups子系统或控制器,主要通过以下九大子系统实现。

(1)blkio:为每个块设备设置I/O限制,如磁盘、光盘和USB等设备。

(2) cpu:使用调度程序提供对CPU的CGroup任务访问。

(3) cpuacct:自动生成CGroup任务的CPU资源使用报告。

(4)cpuset:为CGroup中的任务分配独立CPU (在多核系统中)和内存节点。

(5) devices:允许或拒绝CGroup任务访问设备。

(6) freezer: 暂停和恢复CGroup任务。

(7)memory:设置每个CGroup任务使用的内存限制,并自动生成内存资源使用报告。

(8)net_ clsI: 标记每个网络包以供CGroup任务使用。

(9)ns:命名空间子系统。(namesparce)

二、CGroup的功能和特点

1、CGroups的主要功能

(1) CGroups可实现对进程组使用的资源总额的限制。例如,使用memory子系统为进程组设定一个内存使用上限, 当进程组使用的内存达到限额后再申请内存时,会触发OOM(OutOfMemory)警告。

(2)CGroups可实现对进程组的优先级控制。通过分配CPU时间片数量及硬盘I/O、带宽大小可控制进程的优先级。例如,使用CPU子系统为某个进程组分配特定cpu share。

(3) CGroups 可实现对进程组使用的资源数量的记录。例如,使用cpuacct子系统可记录某个进程组使用的CPU时间。

(4) CGroups 可实现对进程组的隔离和控制。例如,使用ns子系统对不同的进程组使用不同的namespace,以达到隔离的目的,使用不同的进程组实现各自的进程、网络、文件系统挂载空间,也可使用feezer子系统将进程组暂停和恢复。

2、CGroups的特点

(1)控制族群:控制族群是组按照某种标准划分的进程。CGroups中的资源控制都是以控制族群为单位实现的。一个进程可以加入某个控制族群中,也可以从一个进程组迁移到另一个控制族群。一个进程组的进程可以使用CGroups以控制族群为单位分配资源,并受到CGroups以控制族群为单位设定的限制。

(2)层级:控制族群可以组织为hierarchical 的形式,即一棵控制族群树。子控制组自动继承父节点的特定属性,子控制组还可以有自己特定的属性。

(3)子系统:一个子系统就是一个资源控制器, 如memory 子系统是一个内存控制器。子系统必须附加到一个层级上才能起作用。个子 系统附加到某个层级以后, 这个层级上的所有控制族群都受到这个子系统的控制。

三、实训

1、利用CGroups实现CPU资源控制

(1)利用busybox镜像生成容器,设置容器调度的周期为5000,将容器在每个周期内的CPU配额设置为25000

[root@controller ~]# docker run -dit --name t1 --cpu-period 50000 --cpu-quota 25000 busybox:latest
da8f5d80873d6dc349e7aae44ef51571b7c530070b8600468aceaec9c20936ac

(2)利用busybox镜像生成容器。将容器绑定到CPU上执行,设置容器调度的周期和周期内的CPU配额为50000

[root@controller ~]# docker run -dit --name t2 --cpuset-cpus 0 --cpu-period 50000 --cpu-quota 50000 busybox
8bc68f70004e051b344948717d82acba9e9c1a0f5a15f911fa60394618436e12

(3)利用busybox镜像生成两个容器,设置第二个容器的CPU使用率是第一个容器的两倍

[root@controller ~]# docker run  -dit --name t3 --cpu-quota 1000 busybox
4908f5f5846fc5f269e5a5c7ebf82a4bf53a6f4dacf47753bbbfb2579fccbf88
[root@controller ~]# docker run  -dit --name t4 --cpu-quota 2000 busybox
71f56247679674f65c888562f3ea8f90f783a20e25a2a0f803bdb1ebef928aa4

2、利用CGroups实现内存资源控制

(1)利用busybox镜像生成容器,设置容器使用的最大内存为256MB

[root@controller ~]# docker run -dit --name  t5 --memory 256MB busybox
3349f1259d61026be4353a6d9460a5e4f43bd960451547d1c4dd383df292fadc

3、利用CGroups实现磁盘I/O控制

(1)利用busybox镜像生成容器,设置第二个容器读这些磁盘的带宽是第一个容器两倍

[root@controller ~]# docker run -dit --name t6 --device-read-bps /dev/sda1:1mb  --device-write-bps /dev/sda1:1mb busybox 
b55bce694ef2a24f029ac9c13afe28510085db2751162d876de1b97e210c1066
[root@controller ~]# docker run -dit --name t7 --device-read-bps /dev/sda1:2mb  --device-write-bps /dev/sda1:2mb busybo
79d2920ce67a8c9956d499cff05fc09bee19ab412e419817ea7f220cd6cfc45c

(2)利用busybox镜像生成容器,设置容器读写速度为30MB/s

[root@controller ~]# docker run -dit --name t8 --device-write-bps /dev/sd2:30mb busybox
70ce52a12add7635fcf082311f5cd719ade0036c0a716ced275a83c4802ea4a2

http://www.xdnf.cn/news/210097.html

相关文章:

  • 公路风险落图,道路点任意经纬度里程求解
  • 2. python协程/异步编程详解
  • 【软考-高级】【信息系统项目管理师】【论文基础】沟通管理过程输入输出及工具技术的使用方法
  • python的turtle库实现四叶草
  • Reactor框架介绍
  • Java应用8(I/O)
  • 【含文档+PPT+源码】基于SSM的电影数据挖掘与分析可视化系统设计与实现
  • Nginx 核心功能笔记
  • PyQt6基础_QThreadPool
  • 62.微服务保姆教程 (五) Seata--微服务分布式事务组件
  • 基于arduino的温湿度传感器应用
  • Apache Flink的架构设计与运行流程说明
  • Lua 第14部分 数据结构
  • 洛谷 B3644:【模板】拓扑排序 / 家谱树 ← 邻接表
  • linux修改环境变量
  • JMM中的内存屏障
  • 【电子战数字孪生系统】新一代雷达目标与干扰模拟器技术白皮书
  • 数字中国浪潮下:Coremail AI赋能邮件办公,筑牢安全防线引领转型
  • Dia-1.6B 在 Windows 系统下的成功部署及多人情景对话克隆实践
  • SSR vs SSG:前端渲染模式终极对决(附 Next.js/Nuxt.js 实战案例)
  • Java中的接口和抽象类
  • JSON-RPC 2.0 规范中文版——无状态轻量级远程过程调用协议
  • 无锡哲讯科技:引领企业数字化转型的SAP实施专家
  • 基于论文的大模型应用:基于SmartETL的arXiv论文数据接入与预处理(四)
  • 基于 Windows I/O 完成端口(IOCP)的多线程任务队列系统小case
  • 关于插值和拟合(数学建模实验课)
  • 在 VMware 虚拟机中安装 Windows7
  • 【Redis】缓存|缓存的更新策略|内存淘汰策略|缓存预热、缓存穿透、缓存雪崩和缓存击穿
  • 系统的环境变量
  • 编程中如何与AI交互-结构化输入和理解确认机制