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

Docker的Cgroup资源限制

        Docker通过Cgroup来控制容器使用的资源配额,包括 CPU、内存、磁盘三大方面,基本覆盖了常见的资源配颡和使用量控制。

      Cgoup 是CotrolGroups 的缩写,是Linux 内核提供的一种可以限制、记录、隔高进程组所使用的物理资源(如CPU、内存、磁盘 IO 等等)的机制,被LXC、docker等很多项目用于实现进程资源控制。cgroup 本身是提供将进程进行分组化管理的功能和接口的基础结构,IO或内存的分配控制等具体的资源管理是通过该功能来实现的。

目录

一、CPU资源限制

1.设置CPU使用率上限

2.设置CPU资源占用比(设置多个容器才有效) 

3.设置容器与CPU绑核

二、内存资源限制

三、对磁盘I/O配额的限制


一、CPU资源限制

1.设置CPU使用率上限

        Linux通过CFS(Completely Fair Scheduler,完全公平调度器)来调度各个进程对CPU的使用。CFS默认的调度周期是10ms。我们可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少CPU 时间。

--cpu-period        #设置调度周期,数值范围是1000~1000000

--cpu-guota        #设置在每个周期内容器能使用的CPU时间,值必须>=1000

--cpu-period,CPU分配的周期(微秒,所以文件名中用us表示)默认为100000。
--cpu-guota,表示该cgroups限制占用的时间(微秒),默认为-1,表示不限制。如果设为50000表示占用50000/100000=50%的CPU。 

创建时限制cpu,然后随便执行一个死循环,在另一个终端进入容器执行top命令,查看发现cpu跑满只有30%了。

同时设置--cpu-period和--cpu-guota,周期设为10000,50%占用就设为5000

注: 以上只是针对单核的设置,在多核情况下,如果 --cpu-period 保持默认的100000,设置 --cpu-guota > 100000,则会使用多核,如设置为200000,就是限制为跑满两个cpu。

2.设置CPU资源占用比(设置多个容器才有效) 

--cpu-shares         #指定CPU份额,默认值为1024,值为1024的倍数(多个容器的数值成比例,就能精确保证占用CPU的份额)

分别进入三个容器进行压测

#分别下载stress压测并使用
docker exec -it c1 bash
yum -y install epel-release
yum -y install stress
stress -c 4docker exec -it c2 bash
yum -y install epel-release
yum -y install stressstress -c 4
docker exec -it c3 bash
yum -y install epel-release
yum -y install stress
stress -c 4

但在有一个容器不工作时,其他容器会有其一获得该容器的cpu份额(所以一般配合quota使用)

3.设置容器与CPU绑核

--cpuset-cpus        #指定与哪个cpu绑定,cpu编号从0开始,多个可以用逗号隔开

二、内存资源限制

-m(--memory)        #限制容器使用的最大内存

--memory-swap        #限制可用的swap大小,使用时必须先指定-m。

正常情况下,--memory-swap 的值包含容器可用内存和可用swap。
所以-m 300m --memory-swap=1g 的含义为容器可以使用300M的物理内存,并且可以使用700M (1G - 300M)的 swap。

--memory-swap 设置为0或者不设置,则容器可以使用的 swap大小为-m 值的两倍。

--memory-swap 的值和 -m 值相同,则容器不能使用 swap。
--memory-swap 值为-1,它表示容器程序使用的内存受限,而可以使用的 swap空间使用不受限制(宿主机有多少swap容器就可以使用多少) 。

三、对磁盘I/O配额的限制

--device-read-bps        #限制某个设备的读速度bps(数据量)单位可以是kb、mb (M)或gb

--device-write-bps        #限制某个设备的写速度bps(数据量)单位可以是kb、mb (M)或gb

--device-read-iops        #限制读某个设备的iops(次数)

--device-write-iops        #限制写入某个设备的iops(次数)

补:docker system prune -a 可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络

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

相关文章:

  • AI智能语音机器人的基本业务流程
  • uniapp 上传比较大的视频文件就超时
  • CSS简介
  • 卡方分箱(chi-square)
  • 深入理解 Flutter 图片加载原理
  • 【电子通识】什么是异常分析中的A-B-A方法
  • [Linux] C获取键盘输入值
  • 探索Python编程世界:开启你的代码之旅
  • 金融术语总结
  • Linux驱动开发(Day5)
  • [机器学习]特征工程:主成分分析
  • Python爬虫实战案例——第一例
  • 一、openlayer开发介绍
  • 利用Jackson封装常用的JsonUtil工具类
  • 阿里云2核4G服务器配置汇总表_轻量和ECS
  • 攻防世界-ics-06
  • 人工智能轨道交通行业周刊-第56期(2023.8.14-8.20)
  • ruoyi-vue-pro yudao 项目报表设计器 积木报表模块启用及相关SQL脚本
  • 【第三阶段】kotlin中使用带let的安全调用
  • JavaScript 快速入门手册
  • FreeMarker系列--list的用法(长度,遍历,下标,嵌套,排序)
  • 【观察】戴尔科技:构建企业创新“韧性”,开辟数实融合新格局
  • 数据管理平台
  • 手搓大语言模型 使用jieba分词制作词表,词表大小几十万 加强依赖性
  • 【校招VIP】java语言类和对象之map、set集合
  • windows服务器下java程序健康检测及假死崩溃后自动重启应用、开机自动启动
  • 七夕特辑(一)浪漫表白方式 用神经网络生成一首情诗
  • springboot的 spring.redis.lettuce的max-active、max-idle、min-idle的搭配
  • 盒子模型样式
  • 动态规划入门之线性动态规划