Docker使用cgroup實現CPU,記憶體和磁碟IO等系統資源的限制。
CPU
Docker現在有2個與CPU資源相關的引數,-c可以指定CPU的佔比,--cpuset可以繫結CPU。例如,指定容器在CPU 0,1執行:
# docker run -it --rm -c 1024 --cpuset=0,1 dbyin/stress --cpu 2
stress: info: [1] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
然後再啟動一個容器,同樣繫結在CPU0,1,-c為512:
# docker run -it --rm -c 512 --cpuset=0,1 dbyin/stress --cpu 2
stress: info: [1] dispatching hogs: 2 cpu, 0 io, 0 vm, 0 hdd
可以看到container1的CPU佔比為1024/(1024+512)=2/3,container2的CPU佔比為512/(1024+512)=1/3。
將container1的cpu.shares改為512,
#echo “512” > /cgroup/cpu/docker/$CONTAINER_ID/cpu.shares
可以看到兩個容器的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
實際上,docker還會允許容器使用-m指定的同樣大小的swap記憶體:
可以看到,容器可以正常啟動。
可以看到,容器由於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/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。