docker的资源控制
1、定义
docker使用的是linux内核系统的cgroup(control grouos)功能进行控制,是一种限制、记录、隔离进程组所使用的物理资源的机制,docker借助这个机制实现资源控制,cgroup本身是提供将进程进行分组话管理的功能和接口的基础结构,分配控制的机制来实现资源控制
2、对容器使用宿主机的资源进行限制【重点。经验】
(1)限制容器对CPU的使用
(2)限制容器对内存的使用
(3)限制磁盘I/O配置(很少用)
(4)限制容器使用swap(必须和限制内存一起使用,否则无效)
对CPU的限制 | |
设置CPU使用率上限 | --cpu-quota 50000 |
设置容器占用CPU权重比 | --cpu-shares 512 |
设置容器绑定CPU内核数 | --cpuset-cpus 0,3 |
对内存的限制 | |
限制容器对内存的使用 | -m 512m(单位小写) |
限制容器使用swap(结合内存) | -m 512m --memory-swap=1g |
对磁盘IO配额控制(blkio)的限制 | |
限制容器在磁盘上的读速度 | --device-read-bps /dev/sda:1M |
限制容器在磁盘上的写速度 | --device-write-bps /dev/sda:1M |
限制容器读取的速度 | --device-read-iops /dev/sda:100 |
限制容器写入的次数 | --device-write-iops /dev/sda:50 |
清理容器磁盘 | |
清理docker占用的磁盘空间 | docker system prune -a |
3、CPU资源控制【重点。经验】
linux通过CFS(Completely Fair Scheduler完全公平调度器),来调度各个进程对CPU的使用。CFS的调度周期是100ms,可自定义调度周期以及在周期时间内各个容器能够使用CPU的调度时间
cpu.cfs_period_us | 容器调用CPU的周期 |
cpu.cfs_quota_us | 每个周期内容器可以使用CPU的时间 |
二者可结合使用 |
注意:CFS周期的有效范围是1ms~1s,--cpu-period的设置时间1000ms~1000000ms,所以容器使用的CPU的配额时间必须>1ms,--cpu-quota的值必须>=1000ms
100000 | 表示CFS调度周期的长度,单位微秒,每个周期内容器可以使用指定比例的CPU时间,默认情况都是100ms。100ms一次调度容器请求CPU的资源,然后内核把CPU资源分配给容器 |
-1 | 表示容器使用宿主机CPU的时间没有限制。调度请求之后,根据配额,内核分配给容器使用CPU的时间 |
CFS调度器:100毫秒就是定义一个周期,在这个周期内,调度任务(容器)的基本时间单位 |
docker stats 容器名称 | 查看容器的运行占用宿主机资源的情况 |
docker top 容器名称 | 查看容器内PID和宿主机PID的映射关系 |
PID容器在宿主机上的进程号 PPID容器内的进程号 |
(1)设置CPU使用率上限
--cpu-quota 50000
方法1:创建容器时限制
①设置50%的比例分配CPU使用时间上限
②进行CPU压力测试
③查看容器占用宿主机CPU的周期
方法2:修改配置文件
①修改容器占用CPU时间的配置文件
修改完成立即生效
②压力测试
③查看容器占用宿主机CPU的周期
(2)设置容器占用CPU权重比(多个容器才有效)
--cpu-shares指定容器占用CPU的份额(默认权重1024,设置的值只能是1024的倍数)。只是给每个容器使用CPU设置相对的权重,权重高的,可以使用的CPU资源更多;但若只有一个容器运行,即便设置权重,但没有其他更高的权重来占用资源,权重低的容器依然不受限
--cpu-shares 512
①创建三个容器占用不同CPU的权重比
②分别进入test3 test4 test5容器,下载压力测试工具,测试系统负载
③docker stats查看容器占用CPU资源情况(根据一开始分配的权重占用CPU资源,权重高,占用资源比例高)
(3)设置容器绑定CPU内核数
--cpuset-cpus 0,3
①绑定CPU内核数创建容器
②压力测试
下载epel源yum -y install epel-release
下载压力测试工具yum -y install stress
③查看容器占用CPU的使用情况
4、内存资源控制【面试题。经验】
(1)限制容器对内存的使用
-m 512m(单位小写)
-m=memory
不限制容器对内存的使用
(2)限制容器使用swap(必须和限制内存一起使用,否则无效)
-m 512m --memory-swap=1g
①若限制内存是512m,设置swap是1G,那么容器实际上能够使用的swap空间是1G-512m=512m
②不设置--memory-swap,限制内存是512m,但是使用的swap空间是限制内存的2倍
③若设置--memroy-swap的值,和内存限制一样,容器不能使用swap
④限制内存是512m,--memory-swap=-1,内存受限还是512m,但容器使用swap空间不再限制,想用多少swap用多少
5、对磁盘IO配额控制(blkio)的限制(很少用)
①限制容器在磁盘上的读速度
--device-read-bps /dev/sda:1M
②限制容器在磁盘上的写速度
--device-write-bps /dev/sda:1M
在使用dd获取空字符集是从文件系统的缓存中输入,速度快;加上oflag=direct后禁用文件系统缓存,直接把数据写入磁盘,可以更真实的测试设备的性能,模拟直接写入物理设备的情况
③限制容器读取的速度
--device-read-iops /dev/sda:100
限制读取操作每秒100次
④限制容器写入的次数
--device-write-iops /dev/sda:50
限制写入的操作每秒50次
6、清理docker占用的磁盘空间
docker system prune -a
删除已经停止的容器
删除所有未被使用的网桥设备
删除所有未被使用的镜像
删除创建容器时的缓存以及无用的数据卷
7、容器对宿主机的资源限制实验
创建三个容器,一条命令分别对三个容器进行资源限制
容器名称 | 占用CPU时间 | 占用CPU的权重 | 占用内存 | 使用CPU |
centos1 | 10000 | 256 | 1G | 1 |
centos2 | 20000 | 512 | 2G | 2 |
centos3 | 30000 | 1024 | 512m | 3 |
10000微秒=10毫秒 |
1、资源限制创建容器
2、分别进行压力测试
3、查看容器对宿主机的资源使用情况
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!