百度网盘链接:https://pan.baidu.com/s/15t_TSH5RRpCFXV-93JHpNw?pwd=8od3  提取码:8od3

7 docker资源配额

7.1 docker容器控制cpu

Docker通过cgroup来控制容器使用的资源限制,可以对docker限制的资源包括CPU 内存 磁盘。

7.1.1  指定docker容器可以使用的cpu份额

查看配置份额的帮助命令:

# docker run –help | grep cpu-shares

cpu配额参数:-c, –cpu-shares int 

例:给容器实例分配512权重的cpu使用份额

# docker run -it –cpu-shares 512 centos  /bin/bash

$ cat /sys/fs/cgroup/cpu/cpu.shares  #查看结果:512

 

在 host 中启动了两个容器:

# docker run –name “container_A” -c 1024 ubuntu

# docker run –name “container_B” -c 512 ubuntu

container_A 的 cpu share 1024,是 container_B 的两倍。当两个容器都需要 CPU 资源时,container_A 可以得到的 CPU 是 container_B 的两倍。

需要注意的是,这种按权重分配 CPU只会发生在 CPU资源紧张的情况下。如果 container_A 处于空闲状态,为了充分利用 CPU资源,container_B 也可以分配到全部可用的 CPU。

7.1.2  CPU core核心控制

参数:–cpuset可以绑定CPU

对多核CPU的服务器,docker还可以控制容器运行限定使用哪些cpu内核和内存节点,即使用–cpuset-cpus和–cpuset-mems参数。对具有NUMA拓扑(具有多CPU 多内存节点)的服务器尤其有用,可以对需要高性能计算的容器进行性能最优的配置。如果服务器只有一个内存节点,则–cpuset-mems的配置基本上不会有明显效果。

7.1.3  CPU配额控制参数的混合使用

在上面这些参数中,cpu-shares控制只发生在容器竞争同一个cpu的时间片时有效。

测试cpu-shares和cpuset-cpus混合使用运行效果,就需要一个压缩力测试工具stress来让容器实例把cpu跑满。

# yum -y install epel-release

# yum -y install stress

stress参数解释

-?  显示帮助信息

-v  显示版本号

-q  不显示运行信息

-n  显示已完成的指令情况

-t  –timeout  N  指定运行N秒后停止        

   –backoff  N  等待N微妙后开始运行

-c  产生n个进程 :每个进程都反复不停的计算随机数的平方根,测试cpu

-i  产生n个进程 :每个进程反复调用sync(),sync()用于将内存上的内容写到硬盘上,测试磁盘io

-m  –vm n 产生n个进程,每个进程不断调用内存分配malloc()和内存释放free()函数 ,测试内存

   –vm-bytes B  指定malloc时内存的字节数 (默认256MB)

   –vm-hang N   指定在free栈的秒数  

-d  –hadd n  产生n个执行write和unlink函数的进程

   -hadd-bytes B  指定写的字节数

   –hadd-noclean  不unlink 

 

运行两个容器实例

# docker run -itd –name docker10 –cpuset-cpus 0,1 –cpu-shares 512 centos /bin/bash

# docker run -itd –name docker20 –cpuset-cpus 0,1 –cpu-shares 1024 centos /bin/bash

 

测试1: 进入docker10,使用stress测试进程是不是只在cpu0,1上运行:

# docker exec -it  docker10  /bin/bash

$  yum install -y epel-release  #安装epel扩展源

$ yum install stress -y    #安装stress命令

$ stress -c 2 -v  -t 10m   #运行2个进程,把两个cpu占满

通过top命令可看到正常只在cpu0,1上运行。

 

测试2: 进入docker20,使用stress测试进程是不是只在cpu0,1上运行,且docker20上运行的stress使用cpu百分比是docker10的2倍

# docker exec -it  docker20  /bin/bash

$ yum install -y epel-release  #安装epel扩展源

$ yum install stress -y  

$ stress  -c 2 -v -t 10m

在另外一个虚拟终端上运行top命令,按1快捷键,查看每个cpu使用情况

7.2 docker容器控制内存

Docker提供参数-m, –memory=””限制容器的内存使用量。

例1:允许容器使用的内存上限为128M:

# docker run -it  -m 128m centos

$ cat /sys/fs/cgroup/memory/memory.limit_in_bytes

134217728

注:也可以使用tress进行测试。

例2:创建一个docker,只使用2个cpu核心,只能使用128M内存

# docker run -it –cpuset-cpus 0,1 -m 128m centos

7.3 docker容器控制IO

限制此设备上的写速度(bytes per second),单位可以是kb mb或者gb。

–device-read-bps value

例1:限制容器实例对硬盘的最高写入速度设定为 2MB/s。

–device参数:将主机设备添加到容器

# mkdir -p /var/www/html/

# docker run -it -v /var/www/html/:/var/www/html –device /dev/sda:/dev/sda –device-write-bps /dev/sda:2mb centos /bin/bash

$ time dd if=/dev/sda of=/var/www/html/test.out bs=2M count=50 oflag=direct,nonblock

注:dd 参数:

direct:读写数据采用直接IO方式,不走缓存。直接从内存写硬盘上。

nonblock:读写数据采用非阻塞IO方式,优先写dd命令的数据。

原文地址:http://www.cnblogs.com/KrillLiszt/p/16912172.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性