详解Docker cpu限制分析

2020-06-17 06:44:45易采站长站整理

docker run --name cpuuse -d --cpu-period=100000 --cpu-quota=400000 fangfenghua/cpuusetest 4
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21976 root 20 0 3048 724 456 R 398.3 0.1 0:16.81 full_cpu
21297 root 20 0 0 0 0 S 0.3 0.0 0:00.08 kworker/0:2
1 root 20 0 41620 4088 2380 S 0.0 0.4 0:03.19 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd

使用上述两个参数可以,设置cpu的精确控制。还有一个参数cpu-share,是个相对值。假如设置A容器cpu-share为1536,设置B容器为512。那么,在容器B启动前,cpu占用情况为是什么呢?


top - 07:56:10 up 1:56, 2 users, load average: 0.75, 0.36, 0.50
Tasks: 153 total, 3 running, 140 sleeping, 10 stopped, 0 zombie
%Cpu(s): 99.7 us, 0.1 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 1017144 total, 436300 free, 155616 used, 425228 buff/cache
KiB Swap: 1040380 total, 1040284 free, 96 used. 703544 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22216 root 20 0 3048 720 456 R 399.3 0.1 0:55.03 full_cpu
1 root 20 0 41620 4088 2380 S 0.0 0.4 0:03.29 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.05 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.54 ksoftirqd/0

启动容器B:


top - 07:57:09 up 1:57, 2 users, load average: 3.55, 1.16, 0.76
Tasks: 162 total, 4 running, 148 sleeping, 10 stopped, 0 zombie
%Cpu(s): 99.6 us, 0.2 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem : 1017144 total, 428772 free, 158304 used, 430068 buff/cache
KiB Swap: 1040380 total, 1040284 free, 96 used. 700444 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22216 root 20 0 3048 720 456 R 305.7 0.1 4:40.78 full_cpu
22336 root 20 0 3048 720 460 R 95.3 0.1 0:09.02 full_cpu
1 root 20 0 41620 4088 2380 S 0.0 0.4 0:03.31 systemd

从上述测试结果不难看出。设置相对数值时,容器B启动之前,容器A仍然占满了cpu,而容器B启动后则,容器占3/4,容器B占1/4。

还有一个参数cpu-sets,指定容器使用的核心。使用上述测试容器测试,指定容器使用0,3核心:


docker run --name cpuuse -d --cpuset-cpus=0,3 fangfenghua/cpuusetest 4

0,3核心占用率:


[root@localhost src]# dstat -c -C 0,3
-------cpu0-usage--------------cpu3-usage------
usr sys idl wai hiq siq:usr sys idl wai hiq siq
25 9 66 0 0 0: 12 1 87 0 0 0
100 0 0 0 0 0:100 0 0 0 0 0
99 0 0 0 0 1:100 0 0 0 0 0
99 1 0 0 0 0: 99 1 0 0 0 0
100 0 0 0 0 0:100 0 0 0 0 0
100 0 0 0 0 0:100 0 0 0 0 0