Docker资源控制(cpu、内存、IO资源控制)

CPU使用率控制

cpu周期: 1s为一个周期的定律,参数值一般为100000 (CPU衡量单位是秒)

Cpu资源资源查询目录

CPU资源查询目录

[root@server1 ~]# cd /sys/fs/cgroup/cpu/docker/
[root@server1 docker]# ls
28b409b7507edb0b5985a0acd80f1da806b9e6c7b2044b4c2c32481508a193d6
8ce50b325e19b6c0727469ba4a1c74a76ff7b26d517dc43bbb70aebf8fb6c6f6
cgroup.clone_children
cgroup.event_control
cgroup.procs
cpuacct.stat
cpuacct.usage
cpuacct.usage_percpu
cpu.cfs_period_us
cpu.cfs_quota_us
cpu.rt_period_us
cpu.rt_runtime_us
cpu.shares
cpu.stat
e6b17bafdb947d3875127146739facda85432a1fb057b7887ecc7618b6fde59e
notify_on_release
tasks


'查看cpu限制情况'
[root@server1 docker]# cd 28b409b7507edb0b5985a0acd80f1da806b9e6c7b2044b4c2c32481508a193d6/
[root@server1 28b409b7507edb0b5985a0acd80f1da806b9e6c7b2044b4c2c32481508a193d6]# ls
cgroup.clone_children  cpuacct.stat          cpu.cfs_period_us  cpu.rt_runtime_us  notify_on_release
cgroup.event_control   cpuacct.usage         cpu.cfs_quota_us   cpu.shares         tasks
cgroup.procs           cpuacct.usage_percpu  cpu.rt_period_us   cpu.stat

在这里插入图片描述

cpu使用率限制

假如需要给此容器分配cpu使用率的20%,则参数需要设置为20000,相当于每个周期分配给这个容器0.2s

方式一:命令控制,在容器创建的时候进行设置,假如设置参数20000

[root@server1 ~]# docker run -itd --name test4 --cpu-quota 20000 centos:7 /bin/bash
018c7ccf76f5c90bd853c7a2ff985beee76ab767a5b1ed2654d0fb542a1e844b

在这里插入图片描述
压力测试验证cpu控制结果,另起一个终端,执行top 动态查询信息

[root@server1 ~]# docker exec -it 018c7ccf76f5 /bin/bash
[root@018c7ccf76f5 /]# yum -y install bc

执行命令计算圆周率

[root@018c7ccf76f5 /]# echo "scale=5000;4*a(1)" | bc -l -q

在这里插入图片描述

方式二:直接修改配置参数

[root@server1 28b409b7507edb0b5985a0acd80f1da806b9e6c7b2044b4c2c32481508a193d6]# echo "20000" > 28b409b7507edb0b5985a0acd80f1da806b9e6c7b2044b4c2c32481508a193d6

设置容器的权重

按比例分配 设置容器权重,此处权重是所有值相加然后看占用百分比

设置容器权重

[root@server1 ~]# docker run -itd --name ct1 --cpu-shares 512 centos:7 /bin/bash
750aa51926fa5166a9aa5e0e6a3216c91d8b1c414c17c88a335180589f8a6620
[root@server1 ~]# docker run -itd --name ct2 --cpu-shares 1024 centos:7 /bin/bash
5dc4b062c91f51b77f69984214f0190c34659cc5f39ac63d4f9c2c1b7be4f48d
[root@server1 ~]# docker stats

在这里插入图片描述

使用压测工具测试

注:复制两个终端,登录后安装压测工具进行测试,主界面保持docker stats动态查看

[root@server1 ~]# docker exec  -it 5dc4b062c91f  /bin/bash
[root@5dc4b062c91f /]# yum -y install epel-release
[root@5dc4b062c91f /]# yum install stress -y

压测实验,分别在两个容器中同时使用压测工具模拟产生4个cpu线程,然后查看主终端的状态观测

[root@5dc4b062c91f /]# stress -c 4
stress: info: [113] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd

在这里插入图片描述
这里对ct2做了压测工具
在这里插入图片描述

指定容器使用的CPU

先清空现有的容器

 [root@docker ~]# docker ps -a | awk '{print "docker rm "$1}'| bash

创建容器、指定使用的CPU

使用top动态观测cpu使用状态
指定cpu 1,3 表示指定使用第二、第四个cpu

docker run -itd --name test --cpuset-cpus 1,3 centos:7 /bin/bash

'内核不够情况下报错:docker: Error response from daemon: Requested CPUs are not available - requested 1,3, available: 0-1.'


[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
e53d3e2d5f49        centos:7            "/bin/bash"         5 seconds ag

另起终端,进入容器,安装压测工具

[root@docker ~]# docker exec -it e53d3e2d5f49 /bin/bash
[root@3e85fc6a8e03 /]# yum install epel-release -y
[root@3e85fc6a8e03 /]# yum install stress -y
[root@e53d3e2d5f49 /]# stress -c 4

#查看主终端top中cpu使用状态
[root@server1 ~]# top
top - 04:13:17 up  9:45,  4 users,  load average: 0.43, 0.15, 0.09
Tasks: 223 total,   3 running, 220 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

docker MEM内存使用上限限制

创建容器

[root@server1 ~]# docker run -itd --name C1 -m 521m centos:7 /bin/bash
b4cd848195afe8593c03ed97363217a75af9263c807a887e70d96ded9bf9a304
[root@server1 ~]# docker ps
CONTAINER ID   IMAGE      COMMAND       CREATED         STATUS         PORTS     NAMES
b4cd848195af   centos:7   "/bin/bash"   5 seconds ago   Up 4 seconds             C1

查看

[root@server1 ~]# docker stats

在这里插入图片描述

docker Io限制

  1. docker的Io限制就是对block的Io进行约束
  2. 控制数据量用的较多,其中控制Io次数使用的较少

device-read-bps :限制读某个设备的bps(数据量

[root@docker ~]# docker run -itd --device-read-bps /dev/sda:30M centos:7 /bin/bash

device-write-bps:限制写入某个设备的bps(数据量)

[root@docker ~]# docker run -itd --device-write-bps /dev/sda:30M centos:7 /bin/bash

device-read-iops 限制读某个设备的iops(次数)
device-write-iops 限制写入某个设备的iops(次数)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_50344807/article/details/114655897