Docker容器CPU限制选项测试
Docker Version: 19.03.5
😄 Written by Zak Zhu
目录
- Docker容器CPU限制选项测试
- 参考
- 实验环境
- --cpu-shares选项
- 测试
- 结论
- --cpus选项
- 测试
- 结论
- --cpuset-cpus选项
- 测试
- 结论
参考
- Breeze老师的docker培训
- 马哥docker视频
实验环境
HOST | CPUs |
VM | 4 |
--cpu-shares选项
--cpu-shares int
Set this flag to a value greater or less than the default of 1024 to increase or reduce the container's weight, and give it access to a greater or lesser proportion of the host machine's CPU cycles. This is only enforced when CPU cycles are constrained. When plenty of CPU cycles are available, all containers use as much CPU as they need. In that way, this is a soft limit. It prioritizes container CPU resources for the available CPU cycles. It does not guarantee or reserve any specific CPU access.
测试
- TEST l :
容器A:
--cpu-shares 1024
设置容器使用CPU的权重为1024- 压测8核, 容器CPU满负载情况
docker container run \
--name "container_A" --cpu-shares 1024 \
--detach --rm \
progrium/stress --cpu 8
发现:
- 容器A使用了宿主机全部CPU资源(大约400%), 结果见下图
- TEST ll :
容器A:
--cpu-shares 512
设置容器使用CPU的权重为512- 压测8核, 容器CPU满负载情况
容器B:
--cpu-shares 1536
设置容器使用CPU的权重为1536 (=3*512)- 压测8核, 容器CPU满负载情况
## 容器A:
docker container run \
--name "container_A" --cpu-shares 512 \
--detach --rm \
progrium/stress --cpu 8
## 容器B:
docker container run \
--name "container_B" --cpu-shares 1536 \
--detach --rm \
progrium/stress --cpu 8
发现:
- 容器A使用了宿主机大约100%的CPU资源, 结果见下图
- 容器B使用了宿主机大约300%的CPU资源, 结果见下图
- TEST lll :
容器A:
--cpu-shares 1024
设置容器使用CPU的权重为1024- 压测8核, 容器CPU满负载情况
容器B:
--cpu-shares 1024
设置容器使用CPU的权重为1024- 压测8核, 容器CPU满负载情况
容器C:
--cpu-shares 1024
设置容器使用CPU的权重为1024- 执行
sleep 3600
命令, 容器CPU空闲情况容器D:
--cpu-shares 1024
设置容器使用CPU的权重为1024- 执行
sleep 3600
命令, 容器CPU空闲情况
## 容器A:
docker container run \
--name "container_A" --cpu-shares 1024 \
--detach --rm \
progrium/stress --cpu 8
## 容器B:
docker container run \
--name "container_B" --cpu-shares 1024 \
--detach --rm \
progrium/stress --cpu 8
## 容器C:
docker container run \
--name "container_C" --cpu-shares 1024 \
--detach --rm \
busybox sleep 3600
## 容器D:
docker container run \
--name "container_D" --cpu-shares 1024 \
--detach --rm \
busybox sleep 3600
发现:
- 容器A使用了宿主机大约200%的CPU资源, 结果见下图
- 容器B使用了宿主机大约200%的CPU资源, 结果见下图
- 容器C没有使用宿主机的CPU资源(0%), 结果见下图
- 容器D没有使用宿主机的CPU资源(0%), 结果见下图
- TEST IV :
容器A:
--cpu-shares 5120
设置容器使用CPU的权重为5120 (=5*1024)- 压测8核, 容器CPU满负载情况
容器B:
--cpu-shares 4096
设置容器使用CPU的权重为4096 (=4*1024)- 压测8核, 容器CPU满负载情况
容器C:
--cpu-shares 1024
设置容器使用CPU的权重为1024- 压测8核, 容器CPU满负载情况
容器D:
--cpu-shares 8192
设置容器使用CPU的权重为8192 (=8*1024)- 执行
sleep 3600
命令, 容器CPU空闲情况
## 容器A:
docker container run \
--name "container_A" --cpu-shares 5120 \
--detach --rm \
progrium/stress --cpu 8
## 容器B:
docker container run \
--name "container_B" --cpu-shares 4096 \
--detach --rm \
progrium/stress --cpu 8
## 容器C:
docker container run \
--name "container_C" --cpu-shares 1024 \
--detach --rm \
progrium/stress --cpu 8
## 容器D:
docker container run \
--name "container_D" --cpu-shares 8192 \
--detach --rm \
busybox sleep 3600
发现:
- 容器A使用了宿主机大约200%的CPU资源, 结果见下图
- 容器B使用了宿主机大约160%的CPU资源, 结果见下图
- 容器C使用了宿主机大约40%的CPU资源, 结果见下图
- 容器D没有使用宿主机的CPU资源(0%), 结果见下图
结论
--cpu-shares
选项可以设置容器使用宿主机CPU资源的权重--cpu-shares
选项只有当容器CPU紧张时生效, CPU紧张的容器按它们的权重比例分配宿主机CPU资源, 并且充分利用宿主机CPU资源, 不计算CPU空闲的容器权重
当只有一个容器CPU紧张时, 该容器可以分配到宿主机全部CPU资源
--cpus选项
--cpus decimal
Specify how much of the available CPU resources a container can use. For instance, if the host machine has two CPUs and you set
--cpus 1.5
, the container is guaranteed at most one and a half of the CPUs.
测试
- TEST l :
容器A:
--cpus 2
限制容器最多使用2个CPU核- 压测8核, 容器CPU满负载情况
docker container run \
--name "container_A" --cpus 2 \
--interactive --tty --rm \
progrium/stress --cpu 8
发现:
- 容器A使用了宿主机大约200%的CPU资源, 结果见下图
- TEST ll :
容器A:
--cpus 0.5
限制容器最多使用0.5个CPU核- 压测8核, 容器CPU满负载情况
docker container run \
--name "container_A" --cpus 0.5 \
--interactive --tty --rm \
progrium/stress --cpu 8
发现:
- 容器A使用了宿主机大约50%的CPU资源, 结果见下图
结论
--cpus
选项可以限制容器使用宿主机的最多CPU核数
--cpuset-cpus选项
--cpuset-cpus string
Limit the specific CPUs or cores a container can use. A comma-separated list or hyphen-separated range of CPUs a container can use, if you have more than one CPU. The first CPU is numbered 0. A valid value might be
"0-3"
(to use the first, second, third, and fourth CPU) or"1,3"
(to use the second and fourth CPU).
测试
- TEST l :
容器A:
--cpuset-cpus "0-2"
限制容器使用第1个, 第2个, 第3个CPU核- 压测8核, 容器CPU满负载情况
docker container run \
--name "container_A" --cpuset-cpus "0-2" \
--interactive --tty --rm \
progrium/stress --cpu 8
发现:
- 容器A仅使用了宿主机的Cpu0, Cpu1和Cpu2, 结果见下图
- TEST ll :
容器A:
--cpuset-cpus "1,3"
限制容器使用第1个, 第3个CPU核- 压测8核, 容器CPU满负债情况
docker container run \
--name "container_A" --cpuset-cpus "1,3" \
--interactive --tty --rm \
progrium/stress --cpu 8
发现:
- 容器A仅使用了宿主机Cpu1和Cpu3, 结果见下图
结论
--cpuset-cpus
选项可以限制容器使用宿主机的哪个或哪几个CPU核