目标:
限制容器的cpu资源上限为每1秒内可以占用cpu0.5秒。
准备:
-centos7
-docker
-stress(用来有效的消耗cpu资源,模拟高负载场景)
-用到参数--cpu-period(周期),--cpu-quota(配额)
-1秒=1000毫秒
-1毫秒=1000选项单位
-1秒=1000000选项单位
过程:
运行容器:
每1秒最多使用0.5秒的cpu
[root@server ~]# docker run -dit --name centos1 --cpu-period=1000000 --cpu-quota=500000 192.168.200.104:5000/centos/stress:latest bash
59c89af717d4606f4a9ec3843ad7fe4d72a81ab81bc299095eab07627aae3952
压力测试(尽量超载):
容器满载的时候占用了50%的cpu
[root@server ~]# docker exec -it centos1 bash
[root@59c89af717d4 /]# stress -c 4
[root@server ~]# docker stats centos1
stress: info: [29] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
centos1 50.07% 968 KiB / 3.86 GiB 0.02% 648 B / 648 B 5.895 MB / 0 B 0
成功!
测试:
也可以设置上限为2个cpu(200%)。
每1秒可以使用2秒的cpu
[root@server ~]# docker run -dit --name centos1 --cpu-period=1000000 --cpu-quota=2000000 192.168.200.104:5000/centos/stress:latest bash
64428831a83319325d685c762e75306e5a45a75eeaa01979eeede758b5f68e65
root@server ~]# docexec -it centos1 bash
[root@64428831a833 /]# stress -c 4
stress: info: [28] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
[root@server ~]# docker stats centos1
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
centos1 201.48% 968 KiB / 3.86 GiB 0.02% 648 B / 648 B 5.886 MB / 0 B 0
本机有四个内核(设置上限为2000%):
[root@server ~]# docker run -dit --name centos1 --cpu-period=1000000 --cpu-quota=20000000 192.168.200.104:5000/centos/stress:latest bash
4ac343f7b5e8a87118e10821b0a252013aeb08e9cbfed86cd2a691b699464d19
[root@server ~]# docker exec -it centos1 bash
[root@4ac343f7b5e8 /]# stress -c 10
stress: info: [35] dispatching hogs: 10 cpu, 0 io, 0 vm, 0 hdd
[root@server ~]# docker stats centos1
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
centos1 417.47% 1.098 MiB / 3.86 GiB 0.03% 648 B / 648 B 5.878 MB / 0 B 0
总结:
配额超过100%前,--cpu-period和--cpu-quota选项是以一个cpu为基准,如果配额超过(100%*宿主机内核数量)则为无限制。
网友评论