文章目录
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限制
- docker的Io限制就是对block的Io进行约束
- 控制数据量用的较多,其中控制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(次数)