docker资源限制
容器怎么实现资源的限制?
通过Cgroup资源限制
docker 通过Cgroup来控制容器使用的资源配额,包括CPU,内存,磁盘三大方面。
Cgroup是linux内核提供的一种可以限制,记录,隔离进程组所使用的物理资源(CPU,内存,磁盘IO)。
Cgroup是提供将进程进行分组化管理的功能和接口的基础结构,I/O或内存的分配控制等具体的资源管理就是通过该功能实现。
总结:通过Cgroup可以限制Docker容器在CPU,内存,磁盘等方面的最大使用量。
怎么实现对CPU的资源控制?
进程在单位时间周期内是顺序运行的,每一个进程是在单位周期内时间分片中运行。按着循环高频率的运行。
控制容器进程对CPU,内存,磁盘IO 使用量的限制
容器怎么实现资源的限制?
通过Cgroup资源限制
docker 通过Cgroup来控制容器使用的资源配额,包括CPU,内存,磁盘三大方面。
Cgroup是linux内核提供的一种可以限制,记录,隔离进程组所使用的物理资源(CPU,内存,磁盘IO)。
Cgroup是提供将进程进行分组化管理的功能和接口的基础结构,I/O或内存的分配控制等具体的资源管理就是通过该功能实现。
总结:通过Cgroup可以限制Docker容器在CPU,内存,磁盘等方面的最大使用量。
对CPU的限制
怎么实现对CPU的资源控制?
进程在单位时间周期内是顺序运行的,每一个进程是在单位周期内时间分片中运行。按着循环高频率的运行。
答:设置进程在PCU使用率的上限。
使用 --cpu-period设置容器CPU调度周期,--cpu-quota设置每个走起内容器使用的CPU时间。--cpu-quota/--cpu-period 为一个CPU的占用率。
如果是多核可以设置大于--cpu-quota。
CPU调度周期有效范围:1ms到1s 配置中为1000到1000000
CPU配额必须大于1ms 配置中大于等于1000
怎么查看--cpu-quota和--cpu-period 时间?
cd 进入/sys/fs/cgroup/cpu/docker/
中查看对应容器的id号 进去容器并查看cpu-quota和cpu-period 时间
查看cpu.cfs_quota_us为-1 表示啥?
不限制,时间周期有多少就用多少 值为:CPU数量*cpu.cfs_period_us的值
怎么模拟容器CPU被沾满的情况?
写死循环可以模拟CPU完全使用的极端情况
docker exec -it 容器别名 sh 进入容器中跑死循环程序
vi test.sh 这里跟的命令可以看作是sh后的容器中运行的命令(vim无法使用,需要使用vi)
#!/bin/sh
i=0
while true
do
let i++
done
chmod +x test.sh
./test.sh
怎么限制容器的使用率上限?
查看
修改cpu.cfs_period_us内的数值,使用率上限通过两个值的比率来进行确定。
echo 数值 > /sys/fs/cgroup/cpu/docker/
对应容器的id号/cpu.cfs_period_us
或:docker run -itd --name c2 --cpu-quota 数值 用户名/仓库名:标记 /bin/bash (docker run 代表创建时后指定cpu使用率)
怎么设置多容器的CPU资源占用比?
若只是通过CPU使用的上限设置CPU占用比,可能会超。若不想繁琐计算来设置cpu份额。
可以使用--cpu-shares指定CPU份额,默认为1024,值为1024的整数倍或一半(512)。多个容器设置完--cpu-shares会自动计算出占用比。
自己的值/总和就是设置的占用比。
容器外无法连接到外网?
先看宿主机是否外网能同 ping www.baidu.com
可能docker的进程出现问题,删除原来的容器重启后重新创建容器就解决了。
docker rm -f $(docker ps -aq)
systemctl restart docker
怎么做压测?
安装压测stress工具做压测:
在docker中
yum install -y epel-release (添加一个第三方源)
yum install -t stress (模拟多进程压测的工具 stress)
stress -c 指定压测CPU数
docker stats 查看docker容器中CPU占用比
怎么指定容器绑定CPU?
CPU编号从0开始
docker run -itd --name test7 --cpuset-cpus 1,3 镜像 /bin/bash 指定容器使用编号为1,3两个CPU。
怎么查看PCU使用情况?
top
1
什么情况下使用--cpu-shares ?或 什么时候--cpu-shares有效?
设置多个容器的CPU使用的占用比,只能在多个容器同时运行且资源紧张时有效。
--cpu-period --cpu-quota这两个参数是做啥的?
设置容器进程能使用CPU使用率的上限。
对内存的限制
iB与B的区别?与关系?
1KB=10^3B 1000B
1KiB=2^10B 1024B
相同数值 iB大于B
怎么对容器内存进行限制?
docker run 运行的时候用-m指定内存大小。
docker run -itd --name c4 -m 512M(大小) 镜像
这里指定的大小单位是 iM
内存除了可用的物理内存 还有交换内存,
使用--memory-swap设置可用内存和交换内存的总和
-m 300m --memory-swap=1g :容器可以使用300M 的物理内存,使用700M 的交换内存。
--memory-swap=0 为默认(不设置也是) 容器使用的swap大小为-m指定的两倍
--memory-swap=-m指定的值 容器不能使用swap
--memory-swap=-1 内存受限,但宿主机有多少swap容器就可以使用多少
怎么查看容器的运行状态(内存 CPU 网络传输速率)?
docker stats
查看到的内存单位是MiB
怎么限制磁盘读写?
对指定磁盘的读速度限制
--device-read-bps 设备名:速度
对指定磁盘的写速度限制
--device-write-bps 设备名:速度
对磁盘的读次数做限制
--device-read-iops
对磁盘的写次数做限制
--device-write-iops
怎么模拟磁盘的写入?
dd if=/dev/zero of=./text.txt bs=1M count=10 oflag=direct