文章目录
Cgroup
Docker通过Cgroup来控制容器使用的资源配额,包括cpu、内存、磁盘三个方面,基本覆盖了常见的资源配额和使用量控制
Cgroup 是Control Groups的缩写,是Linux 内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如CPu、内存、磁盘Io等等)的机制,
被LXC、docker等很多项目用于实现进程资源控制。Cgroup
本身是提供将进程进行分组化管理的功能和接口的基础结构,I/o或内存的分配控制等具体的资源管理是通过该功能来实现的。这些具体的资源管理功能称为cgroup子系统,有以下几大子系统实现:
blkio:设置限制每个块设备的输入输出控制。例如:磁盘,光盘以及usb等等。CPU:使用调度程序为cgroup任务提供 cPU的访问。
cpuacct: 产生cgroup任务的cPU资源报告。
cpuset:如果是多核心的CPu,这个子系统会为cgroup任务分配单独的 CPU和内存。
devices:允许或拒绝cgroup任务对设备的访问。
freezer:暂停和恢复cgroup任务。
memory:设置每个 cgroup 的内存限制以及产生内存资源报告。
net_cls:标记每个网络包以供cgroup方便使用。
ns:―命名空间子系统。
perf_event:增加了对每个group,的监测跟踪的能力,可以监测属于某个特定的group的所有线程以及运行在特定CPU上的线程。
使用stress工具测试
利用dockerfile,安装工具
[root@server ~]# cd /opt/
[root@server /opt]# mkdir stress
[root@server /opt]# cd stress/
[root@server /opt/stress]# vim dockerfile
FROM centos:7
MAINTAINER LIC
RUN yum install -y wget
RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum install -y stress
[root@server /opt/stress]# systemctl restart docker
[root@server /opt/stress]# docker build -t centos:stress .
[root@server /opt/stress]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos stress 4e1c6255ba7b 7 seconds ago 477MB
权重 --cpu-shares
使用如下命令创建容器,命令中的-cpu-shares参数值不能保证可以获得1个cpu或者多少GHz的CPU资源,它仅是一个弹性的加权值。
docker run -itd --cpu-shares 100 centos:stress
说明:默认情况下,每个Docker容器的CPU份额都是1024。 单独一个容器的份额是没有意义的。只有在同时运行多个容器时,容器的CPU加权的效果才能体现出来。
例如,两个容器A. B的CPU份额分别为1000和500, 在CPU进行时间片分配的时候,容器A比容器B多一倍的机会获得CPU的时间片。
但分配的结果取决于当时主机和其他容器的运行状态,实际上也无法保证容器A一定能获得CPU时间片。比如容器A的进程一 直是空闲的,那么容器B是可以获取比容器A更多的CPU时间片的。极端情况下,例如主机上只运行了一个容器,即使它的CPU份额只有50, 它也可以独占整个主机的CPU资源。
开两个容器,都让他们产生10个子函数进程,进入容器,top命令对比cpu使用百分比
[root@server ~]# docker run -itd --name cpu512 --cpu-shares 512 centos:stress stress -c 10
5

本文详细介绍了Docker如何通过Cgroup对容器的CPU、内存和BlockIO进行限制,包括--cpu-shares权重分配、--cpu-period和--cpu-quota周期限制、--cpuset-cpus核心控制以及内存配额和BlockIO限制的设置。通过实例展示了如何使用stress工具测试这些限制,并讨论了参数的实际效果和限制原理。
最低0.47元/天 解锁文章
4088

被折叠的 条评论
为什么被折叠?



