Docker使用Linux cgroup來實現資源的限制,對於CPU的限制有兩種方法:node
1.cpusetdocker
CPU Set限定容器使用某個固定的CPU核。使用默認的libcontainer引擎時,能夠經過--cpuset來指定進程/docker容器在執行時使用某幾個固定的CPU。好比0-3或以逗號分割如0,3,4(0是第一個CPU)。測試
2.cpu.shares
CPU shares是相對權重, 設置爲一個正整數,表明所分配的相對CPU資源比。在Docker中,使用默認的libcontainer引擎時,能夠指定在docker run時指定-c或--cpu-shares=0。當DockerDaemon中增長新的容器時,CPU shares的權重相應減少,當刪除容器時CPU shares的權重相應增長。spa
因爲第二種方式理解上有些繞,且容器真正分到的CPU資源會隨着容器數及其餘容器權重而改變,我的建議並不太適合應用到生產場景中。本文主要分析第一種方式,即cpuset。code
測試步驟blog
一、下載CPU測試image。agileek/cpuset-test給出了一種用於測試CPU的image,功能就是將指定的CPU資源用滿進程
$ docker pull agileek/cpuset-test
二、測試容器佔用單獨CPU資源
$ docker run -it --rm --cpuset=4 agileek/cpuset-test
三、另開終端窗口,觀察CPU佔用狀況it
[root@zhenyunode ~]# mpstat -P ALL 5 10 Linux 3.10.0-123.el7.x86_64 (zhenyunode) 2015年12月20日 _x86_64_ (8 CPU) 21時25分17秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 21時25分22秒 all 12.68 0.00 0.05 0.00 0.00 0.00 0.00 0.00 0.00 87.27 21時25分22秒 0 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.60 21時25分22秒 1 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.60 21時25分22秒 2 0.20 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.60 21時25分22秒 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 21時25分22秒 4 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 21時25分22秒 5 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.80 21時25分22秒 6 0.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.60 21時25分22秒 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
四、測試容器佔用多個CPUio
$ docker run -it --rm --cpuset=0,2,4,5 agileek/cpuset-test /cpus 4
五、另開終端窗口,觀察CPU佔用狀況
[root@zhenyunode ~]# mpstat -P ALL 5 10 Linux 3.10.0-123.el7.x86_64 (zhenyunode) 2015年12月20日 _x86_64_ (8 CPU) 21時26分34秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 21時26分39秒 all 50.24 0.00 0.05 0.00 0.00 0.00 0.00 0.00 0.00 49.71 21時26分39秒 0 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 21時26分39秒 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00 21時26分39秒 2 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 21時26分39秒 3 0.40 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.40 21時26分39秒 4 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 21時26分39秒 5 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 21時26分39秒 6 0.60 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.20 21時26分39秒 7 0.40 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 99.40
通過以上的測試步驟,能夠看到,當爲容器配置某個CPU時,該CPU被佔滿,但其他的CPU並無受到影響。