我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Docker资源限制Cgroup的深入理解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Docker资源限制Cgroup的深入理解

目录
  • 1.Cgroup简介
  • 2.CPU资源限制
    • 2.1 查看CPU使用率
    • 2.2 测试CPU使用率
    • 2.3 设置CPU资源占用比(设置多个容器时才有效)
  • 3.对内存使用进行限制
    • 4.对磁盘IO配额控制(blkio)的限制

      1.Cgroup简介

      _cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespace隔离起来的资源,

      还可以为资源设置权重、计算使用量、操控进程启停等等。所以cgroups (Control groups) 实现了对资源的配额和度量。

      cgroups有四大功能:

      • 资源限制:可以对任务使用的资源总额进行限制;
      • 先级分配:通过分配的cpu时间片数量以及磁盘I0带宽大小,实际上相当于控制了任务运行优先级;
      • 资源统计:可以统计系统的资源使用量,如cpu时长, 内存用量等;
      • 任务控制: cgroup可以对任务执行挂起、恢复等操作。

      2.CPU资源限制

      Linux通过CFS ( Completely Fair Scheduler, 完全公平调度器)来调度各个进程对CPU的使用。CFS默认的调度周期是100ms。
      可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少CPU时间。
      使用–cpu-period即可设置调度周期,使用–cpu-quota即可设置在每个周期内容器能使用的CPU时间。两者可以配合使用。

      CFS周期的有效范围是1ms~1s, 对应的–cpu-period的数值范围是1000~1000000。
      容器的CPU 配额必须不小于1ms,即–cpu-quota 的值必须>= 1000。

      2.1 查看CPU使用率

      查看默认值

      [root@localhost ~]# cd /sys/fs/cgroup/cpu/docker         
      [root@localhost docker]# cat cpu.cfs_period_us cpu.cfs_quota_us 
      100000
      -1
      #cfs_period_us表示一个cpu带宽,单位为微秒。系统总CPU带宽: cpu核心数 * cfs_period_us
      #cfs_quota_us表示Cgroup可以使用的cpu的带宽,单位为微秒。cfs_quota_us为-1,表示使用的CPU不受cgroup限制。cfs_quota_us的最小值为1ms(1000),最大值为1s。
      

      2.2 测试CPU使用率

      docker run -it --name test01 debian:latest
      
      vi cpu.sh
      #!/bin/bash
      i=0
      while true
      do
      	let i++
      done
      
      chmod +x cpu.sh 
      ./cpu.sh &
      另一个终端使用top查看
      

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

      docker rm -f `docker ps -a -q`                    #删除原有容器
      docker run -itd --name test01 --cpu-shares 1024 centos:latest
      docker run -itd --name test02 --cpu-shares 512 centos:latest
      
      #分别进入容器,进行压力测试
      docker exec -it test01/02 bash
      yum install -y epel-release
      yum install stress -y
      stress -c 4					#产生四个进程,每个进程都反复不停的计算随机数的平方根
      
      #查看容器的运行状态(动态更新)
      docker stats 
      CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O        PID
      
      #########################################如果容器使用的是centos8可能无法使用yum安装,按下步骤恢复
      cd /etc/yum.repos.d/
      sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
      sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
      wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
      
      yum clean all
      yum makecache
      

      以下操作test01与test02相同

      由上图可以看见两个容器之间的cpu使用比率接近于2:1
      (cpu使用率超过100的原因:当单个处理器的使用率达到100%时。对于多个处理器,这个数字将超过100%,您需要乘以主机可用

      的处理器数量,才能找到理论上限,由于该虚拟机我分配了两核心,所以理论使用上线为200%)

      3.对内存使用进行限制

      docker run -itd --name test03 -m 512m centos:latest
      docker stats
      


      4.对磁盘IO配额控制(blkio)的限制

      #–device - read-bps:限制某个设备上的读速度bps (数据量),单位可以是kb、mb (M)或者gb。
      docker run -itd --name test04 --device-read-bps /dev/sda:1M centos:latest bash
      #–device-write-bps :限制某个设备上的写速度bps (数据量),单位可以是kb、mb (M)或者gb。
      docker run -itd --name test05 --device-write-bps /dev/sda:1M centos:latest bash
      
      --device-read-iops :限制读某个设备的iops (次数)
      
      --device-write-iops :限制写入某个设备的iops (次数) 
      
      #进入容器验证写入速度
      
      dd if=/dev/zero of=test.txt bs=2M count=5 oflag=direct	#添加oflag参数以规避掉文件系统cache
      

      到此这篇关于Docker资源限制Cgroup的深入理解的文章就介绍到这了,更多相关Docker 资源限制 Cgroup内容请搜索编程界以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程界!

      免责声明:

      ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

      ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

      Docker资源限制Cgroup的深入理解

      下载Word文档到电脑,方便收藏和打印~

      下载Word文档

      猜你喜欢

      Docker资源限制Cgroup怎么使用

      这篇文章主要介绍“Docker资源限制Cgroup怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Docker资源限制Cgroup怎么使用”文章能帮助大家解决问题。1.Cgroup简介_cgr
      2023-07-02

      docker资源限制和compose部署详解

      默认情况下,容器没有资源限制,并且可以使用主机内核调度程序允许的尽可能多的给定资源,这篇文章主要给大家介绍了关于docker资源限制和compose部署的相关资料,需要的朋友可以参考下
      2022-11-13

      docker中容器资源需求、资源限制及HeapSter的示例分析

      这篇文章主要介绍了docker中容器资源需求、资源限制及HeapSter的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。容器的资源需求、资源限制 request
      2023-06-04

      Linux Docker容器化应用的资源预留与限制

      在Linux中,Docker容器化应用的资源预留与限制是确保系统稳定性和性能的关键。通过合理配置资源限制,可以防止资源过度分配,从而避免应用程序之间的资源争用和系统崩溃。以下是Docker容器化应用的资源预留与限制的相关信息:资源预留与限
      Linux Docker容器化应用的资源预留与限制
      2024-10-07

      DB2在Linux上的资源限制管理

      在Linux上管理DB2数据库的资源限制,可以通过设置用户资源限制、使用ulimit命令以及配置cgroups来实现。以下是详细的资源限制管理方法:用户资源限制管理修改系统文件:可以通过修改系统文件来设置全局资源限制。在大多数Linux发
      DB2在Linux上的资源限制管理
      2024-09-22

      深入理解Linux exit函数背后的资源管理

      在Linux系统中,exit()函数是一个用于终止进程的系统调用关闭文件描述符:当进程调用exit()时,内核会关闭该进程打开的所有文件描述符。这意味着进程将不再能够访问这些文件或其他类型的资源(如套接字、管道等)。释放内存:内核会回收进程
      深入理解Linux exit函数背后的资源管理
      2024-09-09

      GO语言临界资源安全问题的深入理解

      目录一、临界资源二、临界资源安全问题三、临界资源安全问题的解决四、写在最后一、临界资源 临界资源: 指并发环境中多个进程/线程/协程共享的资源。 但是在并发编程中对临界资源的处理不当, 往往会导致数据不一致的问题。 示例代码:package
      2022-06-07

      深入理解Linux exit函数对系统资源的释放

      exit() 函数是 Linux 中用于终止进程并释放其占用的系统资源的函数关闭所有打开的文件描述符:当一个进程调用 exit() 时,操作系统会自动关闭该进程打开的所有文件描述符。这将确保进程不再占用任何文件系统资源。释放内存映射:exi
      深入理解Linux exit函数对系统资源的释放
      2024-08-30

      Linux平台上Docker容器化应用的资源预留与限制

      在Linux平台上,使用Docker容器化应用时,可以通过设置资源预留(Resource Reservation)和资源限制(Resource Limits)来控制容器的资源使用。这有助于确保容器不会过度消耗系统资源,从而影响其他容器或宿主
      Linux平台上Docker容器化应用的资源预留与限制
      2024-10-07

      Android消息循环机制源码深入理解

      Android消息循环机制源码前言:搞Android的不懂Handler消息循环机制,都不好意思说自己是Android工程师。面试的时候一般也都会问这个知识点,但是我相信大多数码农肯定是没有看过相关源码的,顶多也就是网上搜搜,看看别人的文章
      2023-05-31

      深入理解spring的AOP机制原理

      前言在软件开发中,散布于应用中多处的功能被称为横切关注点,通常来讲,这些横切关注点从概念上是与应用的业务逻辑相分离的。把这些横切关注点和业务逻辑分离出来正是AOP要解决的问题。AOP能够帮我们模块化横切关注点,换言之,横切关注点可以被描述为
      2023-05-31

      深入理解Django的信号机制

      本文主要介绍了深入理解Django的信号机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
      2023-02-08

      深入理解 Android事件分发机制源码(基于9.0)

      touch事件最开始从Activity 的 dispatchTouchEvent() 方法开始的/frameworks/base/core/java/android/app/Activity.java /*** Called to proc
      2022-06-06

      编程热搜

      目录