Docker CPU 资源限制——CPU分片功能测试

  之前的一篇随笔——Docker CPU 资源限制 中介绍了针对COU的某个或某几个核的控制,今天介绍下CPU分片功能,即CPU占比。

测试步骤

  1、下载CPU测试image。agileek/cpuset-test给出了一种用于测试CPU的image,功能就是将CPU资源用满.

$ docker pull agileek/cpuset-test

  2、观察未开任何应用时的CPU占用情况

[root@elk ~]# mpstat -P ALL
Linux 3.10.-.el7.x86_64 (elk) // _x86_64_ ( CPU) :: AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
:: AM all 0.05 0.00 0.13 0.00 0.00 0.00 0.00 0.00 0.00 99.82
:: AM 0.20 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.60
:: AM 0.00 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.80
:: AM 0.20 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.60
:: AM 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
:: AM 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
:: AM 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
:: AM 0.00 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.80
:: AM 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.80
[root@elk ~]# top
top - :: up days, :, users, load average: 2.18, 7.36, 4.61
Tasks: total, running, sleeping, stopped, zombie
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: total, used, free, buffers
KiB Swap: total, used, free. cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
logstash S 0.7 2.8 :09.16 java
root S 0.3 0.0 :06.19 xfsaild/dm-
elastic+ S 0.3 1.7 :43.65 java
root S 0.0 0.0 :32.37 systemd
root S 0.0 0.0 :00.45 kthreadd
root S 0.0 0.0 :04.83 ksoftirqd/
root - S 0.0 0.0 :00.00 kworker/:0H
root rt S 0.0 0.0 :00.50 migration/
root S 0.0 0.0 :00.00 rcu_bh
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :09.47 rcu_sched
root S 0.0 0.0 :01.54 rcuos/
root S 0.0 0.0 :53.77 rcuos/
root S 0.0 0.0 :00.50 rcuos/
root S 0.0 0.0 :53.75 rcuos/
root S 0.0 0.0 :55.59 rcuos/
root S 0.0 0.0 :44.15 rcuos/
root S 0.0 0.0 :53.57 rcuos/

  3、开启一个容器,占CPU比重为1000,并观察CPU使用情况

[root@elk ~]# docker run -it --rm -c  agileek/cpuset-test
Burning CPUs/cores

另开终端观察CPU占用情况

[root@elk ~]# top
top - :: up days, :, users, load average: 7.26, 3.04, 1.18
Tasks: total, running, sleeping, stopped, zombie
%Cpu(s):100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: total, used, free, buffers
KiB Swap: total, used, free. cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17258 root 20 0 36732 936 564 S 800.0 0.0 19:13.78 cpuburn
root S 0.3 0.0 :00.02 kworker/:
root R 0.3 0.0 :00.01 top
root S 0.0 0.0 :32.35 systemd
root S 0.0 0.0 :00.45 kthreadd
root S 0.0 0.0 :04.83 ksoftirqd/
root - S 0.0 0.0 :00.00 kworker/:0H
root rt S 0.0 0.0 :00.50 migration/
root S 0.0 0.0 :00.00 rcu_bh
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/

此时可以看到,PID17258的进程(也就是我们刚刚开启的docker容器)CPU占到了全部8颗CPU的100%,也就是800%。

  4、再开启一个容器,占CPU比重为3000,并观察CPU使用情况

[root@elk ~]# docker run -it --rm -c  agileek/cpuset-test
Burning CPUs/cores

另开终端观察CPU占用情况

[root@elk ~]# top
top - :: up days, :, users, load average: 11.86, 6.29, 2.72
Tasks: total, running, sleeping, stopped, zombie
%Cpu(s):100.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: total, used, free, buffers
KiB Swap: total, used, free. cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17494 root 20 0 36732 932 560 S 602.1 0.0 3:54.95 cpuburn
17258 root 20 0 36732 936 564 S 197.9 0.0 39:34.78 cpuburn
root S 0.3 0.0 :04.34 irqbalance
root R 0.3 0.0 :00.01 top
root S 0.0 0.0 :32.36 systemd
root S 0.0 0.0 :00.45 kthreadd
root S 0.0 0.0 :04.83 ksoftirqd/
root - S 0.0 0.0 :00.00 kworker/:0H
root rt S 0.0 0.0 :00.50 migration/
root S 0.0 0.0 :00.00 rcu_bh
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/
root S 0.0 0.0 :00.00 rcuob/

  此时可以看到,PID17258的进程(我们开启的第一个docker容器)CPU占到了全部8颗CPU的1/4,也就是200%。而新开启的,占比3000的docker容器站到了全部8颗CPU的3/4,也就是600%。

上一篇:iOS - OC Block 代码块


下一篇:Spring中@Transactional用法深度分析