这里写目录标题
一、资源控制
1.Linux Namespace的6种类型
类型 | 说明 | |
---|---|---|
1 | MNT Namespace | 提供磁盘挂载点和文件系统的隔离能力 |
2 | IPC Namespace | 提供进程间通信的隔离能力 |
3 | Net Namespace | 提供网络隔能力 |
4 | UTS Namespace | 提供主机名隔离能力 |
5 | PID Namespace | 提供进程隔离能力 |
6 | User Namespace | 提供用户隔离能力 |
2.CPU 资源控制
cgroups,是一个非常强大的linux内核工具,他不仅可以限制被 namespace 隔离起来的资源, 还可以为资源设置权重、计算使用量、操控进程启停等等。 所以 cgroups( Control groups) 实现了对资源的配额和度量。
cgroups的四大主要功能
资源限制 | 可以对任务使用的资源总额进行限制 |
优先级分配 | 通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级 |
资源统计 | 可以统计系统的资源使用量,如cpu时长,内存用量等 |
任务控制 | cgroup可以对任务执行挂起、恢复等操作 |
3.查看cpu使用率
[root@lpl ~] # docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9ff531bbea84 tomcat "catalina.sh run" About an hour ago Up About an hour 0.0.0.0:49157->8080/tcp, :::49157->8080/tcp tomcat-net03
b0c7bed19604 tomcat "catalina.sh run" About an hour ago Up About an hour 0.0.0.0:49156->8080/tcp, :::49156->8080/tcp tomcat-net02
e30c313533ae tomcat "catalina.sh run" About an hour ago Up About an hour 0.0.0.0:49155->8080/tcp, :::49155->8080/tcp tomcat01
[root@lpl ~] # cd /sys/fs/cgroup/cpu/docker/e30c313533ae458b957cd4c9055458c558e17b278f07a6127d9b254286d1c94b/
[root@lpl /sys/fs/cgroup/cpu/docker/e30c313533ae458b957cd4c9055458c558e17b278f07a6127d9b254286d1c94b] # cat cpu.cfs_period_us cpu.cfs_quota_us
100000
-1
id可以复制然后tab出完整的
4.设置CPU使用率上限
Linux 通过 CFS(Completely Fair Scheduler,完全公平调度器)来调度各个进程对 CPU 的使用。CFS 默认的调度周期是 100ms。
我们可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少 CPU 时间。
使用 –cpu-period
即可设置调度周期,使用 –cpu-quota
即可设置在每个周期内容器能使用的 CPU 时间。两者可以配合使用。
CFS 周期的有效范围是 1ms~1s,对应的 --cpu-period
的数值范围是 1000~100000。
而容器的 CPU 配额必须不小于 1ms,即 --cpu-quota 的值必须 >= 1000
。
echo 50000 > cpu.cfs_quota_us #修改参数
cat cpu.cfs_quota_us cpu.cfs_period_us
50000
100000
可以编写一个死循环脚本然后打开另一个终端查看CPU占用率只有50%
5.设置CPU资源占比(设置多个容器才有效)
Docker通过--cpu-shares
指定CPU份额,默认值为1024,值为1024的倍数。
比如创建两个容器为test1 和test2, 若只有这两个容器,设置容器的权重,使得test1和test2的CPU资源占比为1/3和2/3。
docker run -itd --name test1 --cpu-shares 1024 centos:7
docker run -itd --name test2 --cpu-shares 512 centos:7
分别进入容器,进行压力测试(由于步骤一致,我这里仅展示test1)
#分别进入容器,进行压力测试
docker exec -it test1 bash
yum install -y epel-release
yum install stress -y
stress -c 4 #产生四个进程,每个进程都反复不停的计算随机数的平方根
安装strees 程序
执行stress -c 4
产生四个进程,每个进程都反复不停的计算随机数的平方根
重新开一个终端,使用docker stats
命令查看CPU占比.
二、对内存使用进行限制
docker run -itd --name test4 -m 512m centos:7 bash
docker stats
创建并运行容器是后缀-m指定占用内存大小
三、对磁盘IO配额控制(blkio)的限制
–device - read-bps
:限制某个设备上的读速度bps (数据量),单位可以是kb、mb (M)或者gb
docker run -itd --name test5 --device-read-bps /dev/sda:1M centos:7 bash
–device-write-bps
:限制某个设备上的写速度bps (数据量),单位可以是kb、mb (M)或者gb
docker run -itd --name test5 --device-write-bps /dev/sda:1M centos:7 bash
--device-read-iops :限制读某个设备的iops (次数)
--device-write-iops :限制写入某个设备的iops (次数)
创建容器限制写速度
[root@lpl ~] # docker run -itd --name test5 --device-write-bps /dev/sda:1M centos:7 bash
4bd056cd4addddb235e5cca8b793d698801b8c60618251fa6f989c025cc42190
[root@lpl ~] # docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4bd056cd4add centos:7 "bash" 10 seconds ago Up 9 seconds test5
cccff4f8a337 centos:7 "bash" 2 minutes ago Up 2 minutes test4
099fa1421139 centos:7 "/bin/bash" 14 minutes ago Up 14 minutes test2
75137058db5f centos:7 "/bin/bash" 15 minutes ago Up 15 minutes test1
[root@lpl ~] # docker exec -it test5 bash
[root@4bd056cd4add /]# mkdir /zzz
[root@4bd056cd4add /]# cd /zzz
[root@4bd056cd4add zzz]# dd if=/dev/zero of=test.txt bs=2M count=5 oflag=direct
5+0 records in
5+0 records out
10485760 bytes (10 MB) copied, 10.0029 s, 1.0 MB/s
[root@4bd056cd4add zzz]#
可以看到写入速度为1M/s