脚本宝典收集整理的这篇文章主要介绍了docker资源控制,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespace隔离起来的资源,还可以为资源设置权重、计算使用量、操控进程启停等等。所以cgroups(Control groups)实现了对资源的配额和度量
linux通过CFS(completely fair scheduler,完全公平调度器)来调度各个进程对CPU的使用。CFS默认的调度周期是100ms。我们可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少CPU时间
使用--cpu-PEriod即可设置调度周期,使用--cpu-quota即可设置在每个周期内容器能使用的CPU时间。两者可以配合使用
CFS周期的有效范围是1ms~1s,对应的--cpu-period的数值范围是1000~100000
而容器的CPU配额必须不小于1ms,即--cpu-quota的值必须 >=1000
cd /Sys/fs/cgroup/cpu/docker/容器ID/
cpu.cfs_period.us:cpu分配的周期(微秒,所以文件名中用us表示),默认100000
cpu.cfs_quota_us:表示该cgroups限制占用的时间(微秒),默认为-1,表示不限制
如果设置为50000,表示占用50%CPU
#设置50%的比例分配CPU使用时间上限
docker run -itd --name test --cpu-quota 50000 centos:7 bash #可以创建一个容器并设置限额
#或者
cd /sys/fs/cgroup/cpu/docker/容器ID/
echo 50000 > cpu.cfs_quota.us
docker exec -IT 容器id bash
#进行CPU压力测试
docker exec -it 容器ID bash
vim /cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done
chmod +x cpu.sh
./cpu.sh
top #可以看到cpu占用资源
#docker通过 --cpu-shares 指定CPU份额,默认值为1024,值为1024的倍数
#创建两个容器为a1和a2 若只用这两个容器,设置容器的权重,使得a1和a2的CPU资源占比为1/3和2/3
docker run -itd --name a1 --cpu-shares 512 centos:7 bash
docker run -itd --name a1 --cpu-shares 1024 centos:7 bash
#分别进入容器,进行压力测试
yum -y install EPEL-release
yum -y install stress
stress -c 4 #产生四个进程,每个进程都反复不停的计算随机数的平方根
#先分配虚拟机4个CPU核数
docker run -itd --name test --cpuset-cpus 1,3 centos:7 bash
#进入容器,进行压力测试
yum -y install epel-release
yum -y install stress
stress -c 4
#退出容器,执行top命令再按1查看CPU使用情况
#-m(--memory=) 选项用于限制容器可以使用的最大内存
docker run -itd -m 512m centos:7 bash
docker stats
#限制可用的swap大小 ,--mamory-swap
--memory-swap是必须要与 --memory一起使用
正常情况下,--mamory-swap的值包含容器可用内存和可用swap
所以-m 300m --mamory-swap-1g 的含义为:容器可以使用300m的物理内存,并且可以使用700M(1G-300)的swqp
如果--mamory-swap设置为0或者不设置,则容器可以使用的swap大小为-m值得两倍
如果--mamory-swap的值和-m相同,则容器不能使用swap
如果--mamory-swap值为-1,它表示容器程序使用的内存受限,而可以使用的swap空间使用不受限制(宿主机有多少swap容器就可以使用多少)
--device-read-bps:限制某个设备上的读速度bps(数据量),单位可以是kb、mb(M)或者gb
例:docker run -itd --name test --device-read-bps /dev/sda:1M cetos:7 bash #限制/dev/sda读取速度为1M
----device-write-bps:限制某个设备上的写入速度bps(数据量),单位可以是kb、mb(M)或者gb
例:docker run -itd --name test2 --device-write-bps /dev/sda:1M cetos:7 bash #限制/dev/sda写入速度为1M
--device-read-iops:限制读某个设备的iops(次数)
--device-write-iops:限制写入某个设备的iops(次数)
#创建容器,并限制写速度
docker run -itd --name test --device-write-bps /dev/sda:1M cetos:7 bash
#通过dd来验证写速度
docker exec -it 容器ID bash
dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct #添加oflag参数以规避掉文件系统cache
以上是脚本宝典为你收集整理的docker资源控制全部内容,希望文章能够帮你解决docker资源控制所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。