Docker使用cgroup实现CPU,内存和磁盘IO等系统资源的限制。linux
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
而后再启动一个容器,一样绑定在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内存
能够看到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博客
能够看到两个容器的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掉。
# 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/ 本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。