第四章_Docker资源控制

Cgroup是Control group的简写,是Linux内核提供的一种限制所使用物理资源的机制.这些资源主要包括CPU、内存.blkio。下面就这3个方面来谈一下Docker是如何使用Cgroup机制进行管理的。

1、对CPU的控制

1.1、限制CPU使用速率

在CentOS 7,3中可以通过修改对应的Cgroup配置文件cpu.cfs_quota_us的值来实现.直接执行echo命令将设定值导入到此文件中就会立即生效。

例如,将容器26dd7c8f4b83的CPU使用设置为20000,设置CPU的使用率限定为20%:

复制代码
[root@blab ~]# echo 20000 > /sys/fs/cgroup/cpu/system.slice/docker-26dd7c8f4b832b3cfc85f0d16b420a58431748b69807be0acc7aa7aaeba2f632.scope/cpu.cfs_quota_us 

1.2、多任务按比例分享CPU

当多个容器任务运行时,很难计算CPU的使用率,为了使容器合理使用CPU资源.可以通过---cpu-share选项设置CPU按比例共享CPU资源,这种方式还可以实现CPU使用率的动态调整。

例如,运行3个新建容器A、B、C,占用CPU资源的比例为1∶1∶2,就可以这样执行:

复制代码
[root@blab ~]# docker run -tid --cpu-shares 1024 docker.io/networkboot/dhcpd
09256abb60551d688b2c9b7c8955166c76ff737977b3c574413da179c0837d2e
[root@blab ~]# docker run -tid --cpu-shares 1024 docker.io/networkboot/dhcpd
60388c22bd6bf5744472d5a27e895409fdb2b56191b0f079f945e997d02d193b
[root@blab ~]# docker run -tid --cpu-shares 2048 docker.io/networkboot/dhcpd
21440d850999325b745f71c4fe1eab452b60dd8e6d2b306c147fea0d500b721a

如果又有一个容器D需要更多的CPJ资源.则可以将其-------cpu-share的值设置为4096,那么A.B.C.D的CPU资源占用比例变为1:1∶2∶ 4。


1.3、现在CPU内核使用

在Docker中可以使用一---cpUset--cpus选项来使某些程序独享CPU内核.以便提高其处理速度.对应的Cgroup配置文件为/sys/fs/cgroup/cpuset /systerm ,slice /docker一容器编号/cpuset ,cpus。选项后直接跟参数0.1、2...表示第1个内核.第⒉个内核.第3个内核,.与/proc/cpuinto 中的CPU编号(Processor)相同,

如果服务器有16个核心,那么CPU编号为0~15,使新建容器绑定第1~2的内核使用,则

复制代码
[root@blab ~]# docker run -tid --cpuset-cpus 0,1 docker.io/networkboot/dhcpd
cf54cc503e7209320361dfd381699e479cad6438bcf5746dda391e6690982a31

那么该容器内的进程只会在编号1、2的CPU上运行。

尽量使用绑定内核的方式分配CPU资源给容器进程使用.然后再配合--cpu-share选项动态调整CPU使用资源的比例。


2、对内存使用的限制

在Docker中可以通过docker run --m 命令来限制容器内存使用量.相应的Cgroup配置文件为/sys/is/cgroup/memory / system , slice/docker一容器编号.scope/memory . limit_in_bytes,但是需要注意,一旦容器Cgroup使用的内存超过了限制的容量,Linux内核将会尝试收回这些内存,如果仍旧没法控制使用内存在限制范围之内,进程就会被杀死.

例如,限制新建容器的内存上限为512MB。

复制代码
[root@blab ~]# docker run -tid -m 512MB docker.io/networkboot/dhcpd
6901afd22692874c64394cb7be696447162f9d4ed3994b4bc8da4224416cf840

3、对blkio的限制

如果在一台服务器上进行容器的混合部署,那么会存在同时几个程序写磁盘数据的情况.这时可以通过--device-write-iops选项来限制每秒写io 次数来限制指定设备的写速度。相应的还有--device-read-bps 选项可以限制读取的速度.但是这种方法只能限制设备,而不能限制分区。相应的Cgroup 写配置文件为/sys/fs/cgroup/blkio/docker一容器ID/blkio , throttle , write_bps_device,

例如.限制新建容器的/dev/sda的写入速度为1MB.

复制代码
[root@blab ~]# docker run -tid --device-write-bps /dev/sda:1MB docker.io/networkboot/dhcpd
ab4db16cbe3798085a3ab98c1726803036a8a3df8324c577c929d56a1401ef47
相关推荐
程序员老陆18 分钟前
说一说FFmpeg6在Linux平台的编译
linux·运维·服务器·ffmpeg
玫幽倩20 分钟前
2026黄河流域公安院校-电子物证单项赛(程序逆向分析+服务器取证)
运维·服务器·python·电子取证·逆向·程序分析·服务器取证
JavaPub-rodert1 小时前
我又把自己的 Go 后台管理系统升级了一遍:文件管理、2GB 上传、私有文件预览、Docker 镜像全安排上了
开发语言·docker·golang·shiyuadmin
爱码少年1 小时前
嗯,腾讯云个人小站Docker镜像下载功能已下线,压力给到阿里云镜像站
docker
赵民勇1 小时前
systemd-cgtop命令详解
linux·运维
Zhu7582 小时前
在docker环境部署frp
运维·docker·容器
运维行者_2 小时前
企业带宽监控工具实战:网络流量分析与异常排查的5个关键能力
运维·服务器·开发语言·网络·分布式·后端·php
刚入门的大一新生3 小时前
Linux-Linux第一个系统程序-进度条
linux·运维·服务器
梦想的旅途23 小时前
企业微信自动化实战:客户资料自动修改与备注同步
运维·自动化·企业微信
梦想的旅途23 小时前
企业微信自动化实战:客户通讯录备份与关系自动迁移
运维·自动化·企业微信