网站建设需要掌握什么技术,wordpress需要备案,怎么可以自己做网站被百度收到,png素材网Docker的资源控制 对容器使用宿主机的资源进行限制#xff0c;如cpu#xff0c;内存#xff0c;磁盘I/O Docker使用linux自带的功能cgroup(control grouos)是linux内核系统提供的一种可以限制#xff0c;记录#xff0c;隔离进程组使用的物理资源 Docker借助这个机制…Docker的资源控制 对容器使用宿主机的资源进行限制如cpu内存磁盘I/O Docker使用linux自带的功能cgroup(control grouos)是linux内核系统提供的一种可以限制记录隔离进程组使用的物理资源 Docker借助这个机制来实现资源的控制 Cgroup本身是提供将进程分组化管理的功能和接口的基础结构分配控制的机制来实现资源控制
cpu资源控制
linux通过CFS(Completely Fair Scheduler 完全公平调度器)来调度各个进程之间对cpu的使用。CFS的调度100ms我们也可以自定义容器的调度周期以及在这个周期时间之内各个容器能够使用cpu的调度时间--cpu-period设置容器调度cpu的周期,只能在容器创建的时候使用--cpu-quota设置在每个周期内容器可以使用cpu的时间只能在容器创建的时候使用 可以配合使用 CFS周期的有效范围是1ms-1s 也就是1000~1000000 容器使用cpu的配额时间必须大于1ms也就是说 --cpu-quota的值必须要1000
cd /sys/fs/cgroup/cpu/docker/07a4683b9aee2363decbbafcc29e4abed2e5aa6aab8b72807f1ebfda
cat cpu.cfs_period_us
100000
CFS表示调度周期的长度以微妙为单位每个周期内容器可以使用指定比例的cpu时间默认情况的值是100000也就是100毫秒cat cpu.cfs_quota_us
-1
如果配置是-1那么容器在使用宿主机cpu的时间将不做任何限制
如果设为正值表示在周期内的配额
如果cpu.cfs_quota_us设置为50000那么容器在一个周期内最多可以使用50毫秒的cpu时间 CFS调度器100毫秒就是定义了一个周期在这个周期之内调度任务(容器)的基本时间单位100毫秒一次调度容器请求cpu的资源然后内核把cpu资源分配给容器 cpu.cfs_quota_us调度请求之后根据配额内核分配给容器使用cpu的时间
如何控制容器使用cpu的时间进行限制
docker exec -it test1 bashvim cpu.sh
#!/bin/bash
i0
while true
do
let i
done压力测试脚本
[rootdocker1 ~]# top [rootdocker1 opt]# docker run -itd --name test6 --cpu-quota 50000 centos:7 /bin/bash
[rootdocker1 opt]# docker restart test6
[rootdocker1 opt]# docker exec -it test6 bash
[root181456d16a59 opt]# vi /opt/cpu.sh
[root181456d16a59 opt]# ./cpu.sh或者
cd /sys/fs/cgroup/cpu/docker/3ed82355f81151c4568aaa6e7bc60ba6984201c
echo 50000 cpu.cfs_quota_us
docker exec -it 3ed82355f811 /bin/bash
./cpu.sh
可以看到cpu占用率接近50%cgroups对cpu的控制起了效果如下图如何设置cpu资源占用权重比需要多个容器才能生效
--cpu-shares
指定容器占用cpu的份额
默认权重是1024设置的值只能是1024的倍数
[rootdocker1 opt]# docker run -itd --name test2 --cpu-shares 512 centos:7 /bin/bash
[rootdocker1 opt]# docker run -itd --name test3 --cpu-shares 512 centos:7 /bin/bash
[rootdocker1 opt]# docker exec -it test2 bash
[rootdocker1 ~]# docker exec -it test3 bash
[rootb043c8c8c29c /]# yum -y install epel-release
[rootb043c8c8c29c /]# yum -y install stress
下载模拟系统负载的工具
[rootb043c8c8c29c /]# stress -c 4
在宿主机查看
[rootb043c8c8c29c /]# exit
[rootdocker1 opt]# docker stats
不加容器名就是显示所有容器占用情况 --cpu-shares指定容器占用cpu的份额模式权重1024设置的值只能是1024的倍数 --cpu-shares 是给每个容器使用cpu设置了相对的权重权重高的可以使用cpu的资源更多但是如果只有一个容器在运行即便设置了权重但是没有其他更高权重的容器来占用资源权重低的容器依然不受影响 设定容器绑定cpu 容器只能使用指定的cpu内核
[rootdocker1 ~]# docker run -itd --name test1 --cpuset-cpus 1,3 centos:7 /bin/bash
[root2c1de1412eee /]# yum -y install epel-release
[root2c1de1412eee /]# yum -y install stress
[root2c1de1412eee /]# stress -c 4
[root2c1de1412eee /]# top
按一下 1 cpu会展开显示
内存
如何限制容器对内存的使用
[rootdocker1 ~]# docker run -itd --name test6 -m 512m centos:7 /bin/bash
指定使用512m的内存也可以写1g 或者2g
如何限制swap
想要限制容器使用swap必须和限制内存一块使用
[rootdocker1 ~]# docker run -itd --name test7 -m 512m --memory-swap1g centos:7 /bin/bash
如果说限制了内存是512 swap是1g那么test容器能够使用的swap空间1g-512m
如果不设置-m 512m 但是使用swap的空间是-m 的两倍
如果设置 --memory-swap的值和内存限制一样容器不能使用swap空间
-m 512m --memory-swap-1内存受限还是512M但是容器使用swap空间不再限制
练习
创建三容器分别对三个容器centos:7进行资源限制
centos1 2 3
centos1一条命令创建占用CPU的时间 10000占用CPU的权重256占用内存1G只能使用CPU1
[rootdocker1 ~]# docker run -itd --name centos1 --cpu-quota 10000 --cpu-shares 256 -m 1g --cpuset-cpus 1 centos:7 /bin/bashcentos2一条命令创建占用CPU的时间 20000占用CPU的权重512占用内存2G只能使用CPU2
[rootdocker1 ~]# docker run -itd --name centos2 --cpu-quota 20000 --cpu-shares 512 -m 2g --cpuset-cpus 2 centos:7 /bin/bashcentos3一条命令创建占用CPU的时间 30000占用CPU的权重1024占用内存512m只能使用CPU3
[rootdocker1 ~]# docker run -itd --name centos3 --cpu-quota 30000 --cpu-shares 1024 -m 512m --cpuset-cpus 3 centos:7 /bin/bash
磁盘 I/O配额
限制容器在磁盘上的读速度
[rootdocker1 ~]# docker run -itd --name test8 --device-read-bps /dev/sda:1M centos:7 /bin/bash限制容器在磁盘上的写限制
[rootdocker1 ~]# docker run -itd --name test1 --device-write-bps /dev/sda:1mb centos:7 /bin/bash
[rootdocker1 ~]# docker exec -it test1 bash
[rootdocker1 ~]# dd if/cev/zero of123.txt bs1 count10 oflagdirectoflagdirect在使用dd获取空字符集是从文件系统的缓存当中输入速度是比较快的禁用文件系统缓存实打实的直接把数据写入磁盘可以更真实的测试设备的性能模拟直接写入物理设备的情况限制容器读取的次数
[rootdocker1 ~]# docker run -itd --name test10 --device-read-iops /dev/sda:100 centos:7 /bin/bash限制读取操作每秒100次
100表示每秒读100次
限制容器写入设备的次数
[rootdocker1 ~]# docker run -itd --name test101 --device-write-iops /dev/sda:50 centos:7 /bin/bash限制写入的操作每秒50次
50表示每秒写50次
如何清理docker占用的磁盘空间
[rootdocker1 ~]# docker system prune -a删除已经停止的容器
- all stopped containers
删除所有未被使用的网桥设备
- all networks not used by at least one container
删除所有未被使用的镜像
- all images without at least one container associated to them
删除创建容器时的缓存以及无用的数据卷- all build cache
总结
怎么对容器使用cpu限制
1、 容器占用cpu的时间
2、 容器占用cpu的权重
3、 容器绑定cpu
容器对宿主机的内存使用限制
-m
swap(了解即可)必须和限制内存一起使用