虚拟化和容器——6 Docker资源控制
基于cgroups
https://tech.meituan.com/2015/03/31/cgroups.html
1. 对CPU的控制
步骤1:限制CPU命令速率。
(1)利用centos:7镜像分别生成容器名为centos1和centos2的容器,其中centos1容器不限制cpu的使用率,centos2容器将cpu的使用率限制为20%。
docker pull centos:7
docker run -dit --name centos1 centos:7 /bin/bash
# 限制CPU百分之20000
docker run -dit --name centos2 --cpu-quota 20000 centos:7 /bin/bash
100000
微秒020000
只能使用百分之20
--cpu-quota 20000
: --cpu-quota定义了容器每--cpu-period(默认为100000微秒,即100ms)可以获得的最大CPU时间,单位为微秒。--cpu-quota 20000意味着在默认的100ms周期中,容器最多只能使用20ms的CPU时间。
(2)通过查看对应的cgroup配置文件 /sys/fs/cgroup/cpu/docker/容器编号/cpu.cfs_quota_us来查看各容器cpu的使用率。
#这里是你的容器名
cat /sys/fs/cgroup/cpu/docker/86ff33795a71f86236011598c9cbaea55c4a319bd142e6ffb845e055d4db4fd9/cpu.cfs_quota_us
没限制的(-1
)
(3)如需修改对应容器的cpu使用率,可以直接修改cgroup配置文件 /sys/fs/cgroup/cpu/docker/容器编号/cpu.cfs_quota_us的值来实现。
修改占用为百分之40
echo 40000 >> /sys/fs/cgroup/cpu/docker/9b19d5677dd03ad0f0f4bd3eee7659b7845fb34e78e42e819f21b6338fdc6342/cpu.cfs_quota_us
cat /sys/fs/cgroup/cpu/docker/9b19d5677dd03ad0f0f4bd3eee7659b7845fb34e78e42e819f21b6338fdc6342/cpu.cfs_quota_us
这里虽然是追加写,但是并不会追加,linux都是文件
,估计是直接内核交互了。?
删掉这俩实验容器
docker rm -f centos1 centos2
步骤2:多任务按比例分享CPU
(1)利用centos:7镜像创建centos3和centos4容器。设置容器权重,使用centos3和centos4的cpu占比为33.3%和66.7% 。
docker run -dit --name=centos3 --cpu-shares 512 centos:7 /bin/bash
docker run -dit --name=centos4 --cpu-shares 1024 centos:7 /bin/bash
docker ps -a
(2)打开另一个终端,使用docker stats命令查看状态。
docker stats
(3)分别打开两个终端,利用两个终端分别进行centos1和centos2容器,安装压力测试包stress。(4)分别在两个容器内启用4个线程。
容器3
#进入容器
docker exec -it centos3 /bin/bash
yum -y install epel-release
yum -y install stress
stress -c 4
容器4
docker exec -it centos4 /bin/bash
yum -y install epel-release
yum -y install stress
stress -c 4
(5)再次利用docker stats命令查看。
还是挺准的
132/(66+132)=0.666666666667
步骤3: 查看cpu内核使用
通过查看Cgroup配置文件为/sys/fs/cgroup/cpuset/docker/容器编号/cpuset.cpus。
1.CPU限制
这个没有文件诶。
应该是默认没有启用
docker run -dit --cpuset-cpus="0,1" --name my_container nginx
这样就有啦
[root@node-a cpuset]# cd docker/8aae2d1e6621d076570cb4e9fc10d099a46475f25add3440848ec1bd243a1f16/
[root@node-a 8aae2d1e6621d076570cb4e9fc10d099a46475f25add3440848ec1bd243a1f16]# cat cpuset.cpus
0-1
删除容器
docker rm -f my_container
2. 对内存使用的限制
docker run -dit --name=centos5 -m 512m centos:7 /bin/bash
docker run -dit --name=centos6 centos:7 /bin/bash
步骤2:打开一个终端,使用docker stats命令查看状态
docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
8df1885fca97 centos6 0.00% 400KiB / 1.777GiB 0.02% 656B / 0B 0B / 0B 1
501410e22049 centos5 0.00% 1.965MiB / 512MiB 0.38% 656B / 0B 9.61MB / 0B 1
步骤3:查看容器对应的Cgroup配置文件可查看容器内存限制。
cat /sys/fs/cgroup/memory/docker/501410e22049929b244235423c19239b50cc61a082834dba85cb18c59e2f7470/memory.limit_in_bytes
536870912 // 536870912=512×1024×1024