docker的资源控制

2023-12-13 04:10:19

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、查看容器对宿主机的资源使用情况

文章来源:https://blog.csdn.net/2303_79207100/article/details/134881063
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。