Docker實踐(5)—資源隔離

Docker使用cgroup實現CPU,內存和磁盤IO等系統資源的限制。linux

CPU

Docker如今有2個與CPU資源相關的參數,-c能夠指定CPU的佔比,--cpuset能夠綁定CPU。例如,指定容器在CPU 0,1運行:docker

# docker run -it --rm -c 1024 --cpuset=0,1 dbyin/stress --cpu 2 bash

stress: info: [1] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hddurl

 NewImage

 

而後再啓動一個容器,一樣綁定在CPU0,1,-c爲512:spa

# docker run -it --rm -c 512 --cpuset=0,1 dbyin/stress --cpu 2blog

stress: info: [1] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd內存

NewImage

能夠看到container1的CPU佔比爲1024/(1024+512)=2/3,container2的CPU佔比爲512/(1024+512)=1/3。資源

 

將container1的cpu.shares改成512,get

#echo 「512」 > /cgroup/cpu/docker/$CONTAINER_ID/cpu.shares博客

NewImage 

能夠看到兩個容器的CPU佔比趨於平均。

 

內存

Docker提供參數-m, --memory=""限制容器的內存使用量。例如,

容許容器使用的內存上限爲128M:

# docker run -it --rm -m 128m dbyin/stress --vm 1 --vm-bytes 128M --vm-hang 0

stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd

NewImage

實際上,docker還會容許容器使用-m指定的一樣大小的swap內存:

NewImage

能夠看到,容器能夠正常啓動。

 NewImage

能夠看到,容器因爲out of memory被kill掉。

 

IO

# docker run -it --rm dbyin/tlinux:1.2 /bin/bash

bash-4.1# time $(dd if=/dev/zero of=f1.txt bs=1024 count=500000 && sync)

500000+0 records in

500000+0 records out

512000000 bytes (512 MB) copied, 1.28334 s, 399 MB/s

 

real    0m12.091s

user    0m0.056s

sys     0m1.237s

能夠看到,寫512M數據,共用12s,平均42M/s。

 

將IO帶寬限制爲10M/s:

# echo "253:1 10485760" > /cgroup/blkio/docker/$CONTAINER_ID/ blkio.throttle.write_bps_device

 

bash-4.1# time $(dd if=/dev/zero of=f1.txt bs=1024 count=500000 && sync)

500000+0 records in

500000+0 records out

512000000 bytes (512 MB) copied, 1.41813 s, 361 MB/s

 

real    0m50.348s

user    0m0.071s

sys     0m1.473s

 

主要參考

[0]https://goldmann.pl/blog/2014/09/11/resource-management-in-docker/


做者:YY哥 
出處:http://www.cnblogs.com/hustcat/ 本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。

相關文章
相關標籤/搜索