一.CPU 资源控制
1.定义
cgroups,是一个非常强大的linux内核工具,他不仅可以限制被 namespace 隔离起来的资源, 还可以为资源设置权重、计算使用量、操控进程启停等等。 所以 cgroups(Control groups)实现了对资源的配额和度量。
2.cgroups四大功能
(1)资源限制:可以对任务使用的资源总额进行限制
(2)优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级
(3)资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等
(4)任务控制:cgroup可以对任务执行挂起、恢复等操作
二.对CPU使用率限制
1.使用stress工具测试CPU 和内存使用情况
- mkdir /opt/stress
- vim /opt/stress/Dockerfile
-
- ——————————————————————————————————————————————————————————————————————————————
-
- FROM centos:7
- RUN yum -y install wget
- RUN wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo #epel源,可以使用扩展软件包(stress)
- RUN yum -y install stress #可以指定产生线程,使用循环语句,测试用'
- ——————————————————————————————————————————————————————————————————————————————
- cd /opt/stress/
- systemctl restart docker.service #建议重启docker,不然下面的操作可能会失败,卡在wget
- docker build -t crntos:stress . #生成镜像
- ...
- ...
- Successfully built 7e69cc4d1b07
- Successfully tagged crntos:stress
- docker images
- #以下可以使用该镜像为基础产生的容器进行测试:'
2.设置CPU资源占用比(设置多个容器时生效)
- docker run -itd --name cpu512 --cpu-shares 512 crntos:stress stress -c 10
- #-c 10表示产生10个子线程,测试用
- docker run -itd --name cpu1024 --cpu-shares 1024 crntos:stress stress -c 10
-
- #查看容器的资源使用状态(动态更新)
- docker stats
-
- 资源是用cadvisor收集的
3.限制CPU使用周期速率
- cat /sys/fs/cgroup/cpu/docker/[容器ID]/cpu.cfs_quota_us
- #-1,表示不做控制
-
- #例如:容器进程需要每Ⅰ秒使用单个cPU的 0.2秒时间,可以将 --cpu-period 设置为1000000(即1秒),cpu-quota 设置为200000 0.2秒)。
- #当然,在多核情况下,如果允许容器进程完全占用两个CPU,则可以将cpu-period 设置为 100000(即 0.1秒),cpu-quota 设置为200000 (0.2秒)。
- docker run -itd --name test01 --cpu-period 100000 --cpu-quota 200000 crntos:stress
-
- #也可以直接去修改文件vim /sys/fs/cgroup/cpu/docker/[容器ID]/cpu.cfs_quota_us
-
- #法一:进入指定容器查看
- docker exec -it test01 bash
- cd /sys/fs/cgroup/cpu
- cat cpu.cfs_period_us
- cat cpu.cfs_quota_us
-
- #法二:docker inspect 容器ID
- docker inspect 6ccc4ddcb6ad
4.限制CPU内核使用
- docker run -itd --name cpu1 --cpuset-cpus 0-1 crntos:stress
- #执行以上命令需要宿主机为双核,表示创建的容器只能用0、1两个内核。最终生成的 cgroup的 CPU内核配置如下
-
- cat /sys/fs/cgroup/cpuset/docker/[容器ID]/cpuset.cpus
-
- docker exec -it cpu1 /bin/bash -c "stress -c 10"