直播信号

目录
一、Docker资源管理接口概览
二、Docker资源管理原理——Cgroups子系统介绍
1. memory -- 用来限制cgroup中的任务所能使用的内存上限
读取内存对应的cgroups文件
读取交换内存对应的cgroups文件
2. 使用stress镜像学习如何为容器分配内存
centos-stress-source:1.0.2镜像创建
分配的内存比指定的内存和交换内存小时,执行正常,不断释放与分配
分配的内存比指定的内存和交换内存大时
不指定swap-memory时,默认swap的值确认
3. cpu子系统
设置cpu权重,容器竞争cpu资源时是才起作用,但容器情况下可以使用到全部的容器资源
4. Block IO
磁盘的读写权重
BLKIO限额具有竞争资源的情况,与 cpu 配额一样
随着Docker技术被越来越多的个人、企业所接受,其用途也越来越广泛。Docker资源管理包含对CPU、内存、IO等资源的限制,但大部分Docker使用者在使用资源管理接口时往往还比较模糊。
本文将尝试介绍Docker资源管理背后的Cgroups机制,并且列举主要的资源管理接口对应的Cgroups接口,让Docker使用者对资源管理更加清晰。
格式
描述 -m, --memory=" <数字>[<单位>]"内存使用限制。 数字需要使用整数,对应的单位是b, k, m, g中的一个。最小取值是4M。--memory-swap="<数字>[<单位>]"总内存使用限制 (物理内存 + 交换分区,数字需要使用整数,对应的单位是b, k, m, g中的一个。--memory-reservation="<数字>[<单位>]"内存软限制。 数字需要使用正整数,对应的单位是b, k, m, g中的一个。--kernel-memory="<数字>[<单位>]"内核内存限制。 数字需要使用正整数,对应的单位是b, k, m, g中的一个。最小取值是4M。--oom-kill-disable=false内存耗尽时是否杀掉容器--memory-swappiness=""调节容器内存使用交换分区的选项,取值为0和100之间的整数(含0和100)。-c, --cpu-shares=0CPU份额 (相对权重)--cpu-period=0完全公平算法中的period值--cpu-quota=0完全公平算法中的quota值--cpuset-cpus="<数字>"限制容器使用的cpu核(0-3, 0,1)--cpuset-mems=""限制容器使用的内存节点,该限制仅仅在NUMA系统中生效。--blkio-weight=0块设备IO相对权重,取值在10值1000之间的整数(包含10和1000)--blkio-weight-device="设备名称:权重值"指定的块设备的IO相对权重--device-read-bps="<设备路径>:<数字>[<单位>]"限制对某个设备的读取速率 ,数字需要使用正整数,单位是kb, mb, or gb中的一个。--device-write-bps="<设备路径>:<数字>[<单位>]"限制对某个设备的写速率 ,数字需要使用正整数,单位是kb, mb, or gb中的一个。--device-read-iops="<设备路径>:<数字>"限制对某个设备每秒IO的读取速率,数字需要使用正整数。--device-write-iops="<设备路径>:<数字>"限制对某个设备每秒IO的写速率,数字需要使用正整数。
Cgroups是control groups的缩写,最初由google的工程师提出,后来被整合进Linux内核。Cgroups是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:CPU、内存、IO等)的机制。Cgroups由7个子系统组成:分别是cpuset、cpu、cpuacct、blkio、devices、freezer、memory。不同类型资源的分配和管理是由各个cgroup子系统负责完成的。
在 /sys/fs/cgroup/子系统名称/docker 目录中为每个容器创建一个 cgroup 目录,并且以容器长ID命名,如下 cpu 资源系统,目录中包含所有与 cpu 相关的 cgroup 配置:
子系统常用cgroups接口
描述
对应的docker接口 cgroup/memory/memory.limit_in_bytes
设定内存上限,单位是字节,也可以使用k/K、m/M或者g/G表示要设置数值的单位。-m, --memory=""cgroup/memory/memory.memsw.limit_in_bytes
设定内存加上交换分区的使用总量。通过设置这个值,可以防止进程把交换分区用光。--memory-swap=""cgroup/memory/memory.soft_limit_in_bytes
设定内存限制,但这个限制并不会阻止进程使用超过限额的内存,只是在系统内存不足时,会优先回收超过限额的进程占用的内存,使之向限定值靠拢。--memory-reservation=""cgroup/memory/memory.kmem.limit_in_bytes
设定内核内存上限。--kernel-memory=""cgroup/memory/memory.oom_control
如果设置为0,那么在内存使用量超过上限时,系统不会杀死进程,而是阻塞进程直到有内存被释放可供使用时,另一方面,系统会向用户态发送事件通知,用户态的监控程序可以根据该事件来做相应的处理,例如提高内存上限等。--oom-kill-disable=""cgroup/memory/memory.swappiness
控制内核使用交换分区的倾向。取值范围是0至100之间的整数(包含0和100)。值越小,越倾向使用物理内存。--memory-swappiness=
读取内存对应的cgroups文件
当内存限制在200M时,cgoups的文件数值为 209715200,单位为字节,刚好等于200M。其中,--rm 表示退出之后删除创建的容器。
读取交换内存对应的cgroups文件
当内存限制在300M时,cgoups的文件数值为 314572800,单位为字节,刚好等于300M。
其余的,以此类推。
centos-stress-source:1.0.2镜像创建
1.创建Dockerfile目录
2.根据Dockerfile生成创建一个stress镜像
3.查看镜像
4.测试是否可用
分配的内存比指定的内存和交换内存小时,执行正常,不断释放与分配
分配的内存比指定的内存和交换内存大时
分配的内存试图超过300M时,stress线程报错,容器强行退出。
不指定swap-memory时,默认swap的值确认
1、指定 -m 内存值为100M
可以看到上述情况,在不指定 memory-swap 大小的情况下,默认取memory的两倍值, 即 200M。
2、当一方的指定值为-1时,表示无限大
可以看到,memory-swap为 无限大。 奇才赛事预测
3、memory 和 memory-swap的关系
所以,当memory-swap值小于memory设定值的时候,会报错如下
子系统常用cgroups接口
描述
对应的docker接口 cgroup/cpu/cpu.shares
负责CPU比重分配的接口。假设我们在cgroupfs的根目录下创建了两个cgroup(C1和C2),并且将cpu.shares分别配置为512和1024,那么当C1和C2争用CPU时,C2将会比C1得到多一倍的CPU占用率。要注意的是,只有当它们争用CPU时CPU share才会起作用,如果C2是空闲的,那么C1可以得到全部的CPU资源。-c, --cpu-shares=""cgroup/cpu/cpu.cfs_period_us
负责CPU带宽限制,需要与cpu.cfs_quota_us搭配使用。我们可以将period设置为1秒,将quota设置为0.5秒,那么cgroup中的进程在1秒内最多只能运行0.5秒,然后就会被强制睡眠,直到下一个1秒才能继续运行。--cpu-period=""cgroup/cpu/cpu.cfs_quota_us
负责CPU带宽限制,需要与cpu.cfs_period_us搭配使用。--cpu-quota=""
设置cpu权重,容器竞争cpu资源时是才起作用,但容器情况下可以使用到全部的容器资源
启动容器 container_a,设置 cpu share = 1024
启动容器 container_b,设置 cpu share = 512
在host中执行 top 查看 cpu 的使用情况
以上,可以看到 container_a 占用的 cpu 资源是 container_b 的两倍。
暂停container_a 可以发现数据如下
可以看到,当 在container_a空闲的时候,container_b 能够用满整个 cpu。
PS. 需要退出当前测试时,需要直接ctrl+c,或者 直接执行 docker stop
子系统常用cgroups接口
描述
对应的docker接口 cgroup/blkio/blkio.weight
设置权重值,取值范围是10至1000之间的整数(包含10和1000)。这跟cpu.shares类似,是比重分配,而不是绝对带宽的限制,因此只有当不同的cgroup在争用同一个块设备的带宽时,才会起作用。--blkio-weight=""cgroup/blkio/blkio.weight_device
对具体的设备设置权重值,这个值会覆盖上述的blkio.weight。--blkio-weight-device=""cgroup/blkio/blkio.throttle.read_bps_device
对具体的设备,设置每秒读块设备的带宽上限。--device-read-bps=""cgroup/blkio/blkio.throttle.write_bps_device
设置每秒写块设备的带宽上限。同样需要指定设备。--device-write-bps=""cgroup/blkio/blkio.throttle.read_iops_device
设置每秒读块设备的IO次数的上限。同样需要指定设备。--device-read-iops=""cgroup/blkio/blkio.throttle.write_iops_device
设置每秒写块设备的IO次数的上限。同样需要指定设备。--device-write-iops=""
磁盘的读写权重
docker 可通过设置权重、限制 bps (每秒读写的数据量)和 iops(每秒 IO 的次数) 的方式控制容器读写磁盘的带宽。
1、限制读写 IO 为50M/s,则最终的读写速度会在50M左右。
2、不限制 IO
PS.注意oflag=direct,需要指定IO方式,目前BLKIO限额只对direct(不使用文件缓存)生效。因为容器的文件系统在 host /dev/sda 上,所以在容器中写文件,相当于对 host /dev/sda 进行写操作
BLKIO限额具有竞争资源的情况,与 cpu 配额一样
1、是 container_b 的BLKIO 优先级是 container_a 的两倍
设置 container_a 的 --blkio-weight 300
设置 container_b 的 --blkio-weight 600
ps. 由于收到执行命令没有办法做到同时IO,所以读写速度上的比例并没有严格的1:2。

05月25日 英超第38轮 桑德兰vs切尔西 全场录像回放
2026年06月03日
05月25日 英超第38轮 热刺vs埃弗顿 全场录像回放
2026年06月03日
05月25日 英超第38轮 利物浦vs布伦特福德 全场录像回放
2026年06月03日
05月20日 英超第37轮 切尔西vs热刺 全场录像回放
2026年06月03日
05月20日 英超第37轮 伯恩茅斯vs曼城 全场录像回放
2026年06月03日
05月25日 英超第38轮 曼城vs阿斯顿维拉 全场录像回放
2026年06月03日
05月09日 英超第36轮 利物浦vs切尔西 全场录像回放
2026年05月20日
05月10日 英超第36轮 伯恩利vs阿斯顿维拉 全场录像回放
2026年05月20日
05月10日 英超第36轮 曼城vs布伦特福德 全场录像回放
2026年05月20日
05月09日 英超第36轮 桑德兰vs曼联 全场录像回放
2026年05月20日
05月09日 英超第36轮 布莱顿vs狼队 全场录像回放
2026年05月20日
05月09日 英超第36轮 富勒姆vs伯恩茅斯 全场录像回放
2026年05月20日
05月19日 英超第37轮 阿森纳vs伯恩利 全场录像回放
2026年05月20日
05月18日 英超第37轮 纽卡斯尔联vsv西汉姆联 全场录像回放
2026年05月20日
05月17日 英超第37轮 利兹联vs布莱顿 全场录像回放
2026年05月20日
05月16日 德甲第34轮 门兴vs霍芬海姆 全场录像回放
2026年05月20日
05月16日 德甲第34轮 勒沃库森vs汉堡 全场录像回放
2026年05月20日
05月16日 德甲第34轮 法兰克福vs斯图加特 全场录像回放
2026年05月20日
05月17日 德甲第34轮 拜仁慕尼黑vs科隆 全场录像回放
2026年05月20日
05月10日 德甲第33轮 沃尔夫斯堡vs拜仁慕尼黑 全场录像回放
2026年05月20日
05月09日 德甲第33轮 霍芬海姆vs不莱梅 全场录像回放
2026年05月20日
05月09日 德甲第33轮 斯图加特vs勒沃库森 全场录像回放
2026年05月20日
05月09日 德甲第33轮 RB莱比锡vs圣保利 全场录像回放
2026年05月20日
05月09日 德甲第33轮 奥格斯堡vs门兴 全场录像回放
2026年05月20日
05月11日 德甲第33轮 美因茨vs柏林联合 全场录像回放
2026年05月20日
05月10日 德甲第33轮 科隆vs海登海姆 全场录像回放
2026年05月20日
05月10日 德甲第33轮 汉堡vs弗赖堡 全场录像回放
2026年05月20日
05月11日 德甲第33轮 美因茨vs柏林联合 全场录像回放
2026年05月13日
05月10日 德甲第33轮 科隆vs海登海姆 全场录像回放
2026年05月13日
05月10日 德甲第33轮 汉堡vs弗赖堡 全场录像回放
2026年05月13日
05月18日 法甲第34轮 洛里昂vs勒阿弗尔 全场录像回放
2026年05月20日
05月18日 法甲第34轮 马赛vs雷恩 全场录像回放
2026年05月20日
05月18日 法甲第34轮 巴黎FCvs巴黎圣日耳曼 全场录像回放
2026年05月20日
05月18日 法甲第34轮 尼斯vs梅斯 全场录像回放
2026年05月20日
05月18日 法甲第34轮 里尔vs欧塞尔 全场录像回放
2026年05月20日
05月18日 法甲第34轮 布雷斯特vs昂热 全场录像回放
2026年05月20日
05月14日 法甲第29轮补赛 朗斯vs巴黎圣日耳曼 全场录像回放
2026年05月20日
05月14日 法甲第29轮 布雷斯特vs斯特拉斯堡 全场录像回放
2026年05月20日
05月11日 法甲第33轮 雷恩vs巴黎FC 全场录像回放
2026年05月20日
05月11日 法甲第33轮 图卢兹vs里昂 全场录像回放
2026年05月20日
05月11日 法甲第33轮 巴黎圣日耳曼vs布雷斯特 全场录像回放
2026年05月20日
05月11日 法甲第33轮 摩纳哥vs里尔 全场录像回放
2026年05月20日
05月11日 法甲第33轮 梅斯vs洛里昂 全场录像回放
2026年05月20日
05月11日 法甲第33轮 勒阿弗尔vs马赛 全场录像回放
2026年05月20日
05月11日 法甲第33轮 欧塞尔vs尼斯 全场录像回放
2026年05月20日
05月24日 西甲第38轮 瓦伦西亚vs巴塞罗那 全场录像回放
2026年06月03日
05月24日 西甲第38轮 皇家马德里vs毕尔巴鄂竞技 全场录像回放
2026年06月03日
05月10日 西甲第35轮 皇家社会vs皇家贝蒂斯 全场录像回放
2026年05月20日
05月09日 西甲第35轮 塞维利亚vs西班牙人 全场录像回放
2026年05月20日
05月18日 西甲第37轮 巴塞罗那vs皇家贝蒂斯 全场录像回放
2026年05月20日
05月18日 西甲第37轮 塞维利亚vs皇家马德里 全场录像回放
2026年05月20日
05月18日 西甲第37轮 皇家社会vs瓦伦西亚 全场录像回放
2026年05月20日
05月18日 西甲第37轮 奥萨苏纳vs西班牙人 全场录像回放
2026年05月20日
05月18日 西甲第37轮 巴列卡诺vs比利亚雷亚尔 全场录像回放
2026年05月20日
05月18日 西甲第37轮 皇家奥维耶多vs阿拉维斯 全场录像回放
2026年05月20日
05月18日 西甲第37轮 莱万特vs马略卡 全场录像回放
2026年05月20日
05月18日 西甲第37轮 马德里竞技vs赫罗纳 全场录像回放
2026年05月20日
05月18日 西甲第37轮 埃尔切vs赫塔费 全场录像回放
2026年05月20日
05月18日 西甲第37轮 毕尔巴鄂竞技vs塞尔塔 全场录像回放
2026年05月20日
05月15日 西甲第36轮 瓦伦西亚vs巴列卡诺 全场录像回放
2026年05月20日
05月25日 意甲第38轮 AC米兰vs卡利亚里 全场录像回放
2026年06月03日
05月24日 意甲第38轮 博洛尼亚vs国际米兰 全场录像回放
2026年06月03日
05月25日 意甲第38轮 都灵vs尤文图斯 全场录像回放
2026年06月03日
05月25日 意甲第38轮 维罗纳vs罗马 全场录像回放
2026年06月03日
05月17日 意甲第37轮 热那亚vsAC米兰 全场录像回放
2026年05月20日
05月10日 意甲第36轮 维罗纳vs科莫 全场录像回放
2026年05月20日
05月10日 意甲第36轮 莱切vs尤文图斯 全场录像回放
2026年05月20日
05月10日 意甲第36轮 拉齐奥vs国际米兰 全场录像回放
2026年05月20日
05月09日 意甲第36轮 卡利亚里vs乌迪内斯 全场录像回放
2026年05月20日
05月18日 意甲第37轮 萨索洛vs莱切 全场录像回放
2026年05月20日
05月18日 意甲第37轮 乌迪内斯vs克雷莫内塞 全场录像回放
2026年05月20日
05月18日 意甲第37轮 卡利亚里vs都灵 全场录像回放
2026年05月20日
05月18日 意甲第37轮 亚特兰大vs博洛尼亚 全场录像回放
2026年05月20日
05月17日 意甲第37轮 国际米兰vs维罗纳 全场录像回放
2026年05月20日
05月17日 意甲第37轮 罗马vs拉齐奥 全场录像回放
2026年05月20日
04月19日 NBA季后赛东部首轮G1 猛龙vs骑士 全场录像回放
2026年05月20日
05月06日 NBA季后赛西部半决赛G1 湖人vs雷霆 全场录像回放
2026年05月20日
05月05日 NBA季后赛东部半决赛G1 76人vs尼克斯 全场录像回放
2026年05月20日
05月06日 NBA季后赛东部半决赛G1 骑士vs活塞 全场录像回放
2026年05月20日
05月05日 NBA季后赛西部半决赛G1 森林狼vs马刺 全场录像回放
2026年05月20日
05月04日 NBA季后赛东部首轮G7 魔术vs活塞 全场录像回放
2026年05月20日
05月03日 NBA季后赛东部首轮G7 76人vs凯尔特人 全场录像回放
2026年05月20日
05月02日 NBA季后赛东部首轮G6 骑士vs猛龙 全场录像回放
2026年05月20日
05月02日 NBA季后赛西部首轮G6 湖人vs火箭 全场录像回放
2026年05月20日
05月02日 NBA季后赛东部首轮G6 活塞vs魔术 全场录像回放
2026年05月20日
05月01日 NBA季后赛西部首轮G6 掘金vs森林狼 全场录像回放
2026年05月20日
05月01日 NBA季后赛东部首轮G6 尼克斯vs老鹰 全场录像回放
2026年05月20日
05月01日 NBA季后赛东部首轮G6 凯尔特人vs76人 全场录像回放
2026年05月20日
04月27日 NBA季后赛东部首轮G4 骑士vs猛龙 全场录像回放
2026年05月20日
04月26日 NBA季后赛西部首轮G4 掘金vs森林狼 全场录像回放
2026年05月20日