0
点赞
收藏
分享

微信扫一扫

docker 容器cpu限额绑定控制、内存使用、io读写控制及容器停止后自动释放资源

秦瑟读书 2024-01-09 阅读 13

容器控制cpu使用

为避免压力测试时导致虚机爆掉,该测试虚机最好含有四个以上的cpu

指定容器可以使用宿主机cpu的份额

该参数只对多个容器竞争同一个cpu的时间片时有效

参数 -c  或者全称  --cpu-shares

可以看到 控制cpu的参数   使用-c  或者全称  --cpu-shares
[root@localhost ~]# docker run --help | grep cpu-shares
  -c, --cpu-shares int                 CPU shares (relative weight)

例1:
启动容器 -c 指定512  进到容器中查看验证 分配的cpu份额
[root@localhost ~]# docker run -it -c 512 centos /bin/bash 
[root@78343cad96de /]# cat /sys/fs/cgroup/cpu/cpu.shares 
512
ps: 那个容器分配的cpu份额高,处理容器的优先级就越高。

cpu核心控制

参数 --cpuset-cpus

绑定容器使用宿主机的某个cpu

在宿主机拥有多个cpu时,可以限制容器只是用哪个cpu (绑定)

--cpuset-cpus与 --cpu-shares 混合使用

创建两个容器test01 和test02。 让test01只运行在cpu0上,test02只运行在cpu1上,最终测试一下test01 和test02使用cpu的百分比。

需要安装一个压力测试工具  如:stress

[root@localhost ~]# yum install -y epel-release
[root@localhost ~]# yum install stress -y

stress参数解释
-?        显示帮助信息
-v        显示版本号
-q        不显示运行信息
-n        显示已完成的指令情况
-t    --timeout   N  指定运行N秒后停止        
      --backoff   N   等待N微妙后开始运行
-c           产生n个进程 :每个进程都反复不停的计算随机数的平方根,测试cpu
-i           产生n个进程 :每个进程反复调用sync(),sync()用于将内存上的内容写到硬盘上,测试磁盘io
-m    --vm n 产生n个进程,每个进程不断调用内存分配malloc()和内存释放free()函数 ,测试内存
      --vm-bytes B  指定malloc时内存的字节数 (默认256MB)
      --vm-hang N   指定在free栈的秒数   
-d    --hadd n      产生n个执行write和unlink函数的进程
       -hadd-bytes B  指定写的字节数
      --hadd-noclean  不unlink        
注:时间单位可以为秒s,分m,小时h,天d,年y,文件大小单位可以为K,M,G

例:  cpu0 和 cpu1  使用top按数字1可查看详情
启动两个容器,使用--cpuset-cpus参数指定cpu0和cpu1 并指定test01容器的cpu份额为512,test02为1024
[root@localhost ~]# docker run -itd --name test01 --cpuset-cpus 0,1 -c 512 centos /bin/bash 
[root@localhost ~]# docker run -itd --name test02 --cpuset-cpus 0,1 -c 1024 centos /bin/bash 

分别进入两个容器安装stress压测工具进行压测
-c指定两个进程 -t 持续时间10分钟  -v 显示版本号
[root@61c1e5e4121a /]# stress -c 2 -v -t 10m
[root@553ea36dadf2 /]# stress -c 2 -v -t 10m

如图所示

-c 2 指定两个进程

两个容器产生四个进程, 其中两个进程的cpu使用率是另外两个进程的2倍,由此可见--cpu-shares启动容器时指定了cpu的份额,实验成功。

而上面也只有cpu0和cpu1两个cpu使用率达到100%,并不会占用另外两个cpu,由此可见--cpuset-cpus启动容器时指定了cpu的绑定,实验成功。


docker 容器cpu限额绑定控制、内存使用、io读写控制及容器停止后自动释放资源_docker

docker 控制容器内存

控制容器的使用内存

指定容器使用内存的上限

参数 -m  全称 --memory

指定该容最多占用宿主机内存500M   (根据实际需求分配)
[root@localhost ~]# docker run -itd --name test03 -m 500m centos /bin/bash

容器内验证
[root@3d39fc5ae38e /]# cat /sys/fs/cgroup/memory/memory.limit_in_bytes 
524288000

也可以和限制cpu一起使用
[root@localhost ~]# docker run -itd --name test04 --cpuset-cpus 0,1 -m 500M centos /bin/bash

docker 控制容器IO

控制容器的使用io

指定容器使用io的上限

限制此设备上的写速度(bytes per second),单位可以是kb、mb或者gb。

防止某个 Docker 容器吃光你的磁盘 I / O 资源

参数  --device-write-bps

[root@localhost ~]# docker run --help | grep write-bps
      --device-write-bps list          Limit write rate (bytes per second) to a device (default [])


限制容器实例对硬盘的最高写入速度设定为 2MB/s

创建一个目录
[root@localhost ~]# mkdir -p /data/ceshi-01

启动容器 -v 指定挂在路径 --device 指定映射的磁盘  --device-write-bps指定/dev/sda的写入速度为每秒2mb
[root@localhost ~]# docker run -itd --name test05 -v /data/ceshi-01/:/data/ceshi-01 --device /dev/sda:/dev/sda --device-write-bps /dev/sda:2mb centos:7 /bin/bash

进入容器进行测试
[root@localhost ~]# docker exec -it test05 /bin/bash
[root@07bade30e314 /]# time dd if=/dev/sda of=/data/ceshi-01/test.out bs=2M count=50 oflag=direct,nonblock

如图所示:每秒写入2M

docker 容器cpu限额绑定控制、内存使用、io读写控制及容器停止后自动释放资源_linux_02

这个命令是使用 dd 命令从硬盘的 /dev/sda 设备读取数据,将其复制到文件 /data/ceshi-01/test.out 中,并测量整个过程所花费的时间

time: 在命令前加上 time 会测量命令执行的时间。

dd: 是一个用于复制文件和转换文件的命令行工具。

if=/dev/sda: 指定输入文件,这里是输入文件路径。/dev/sda 是一个块设备,通常代表系统上的硬盘。

of=/data/ceshi-01/test.out: 指定输出文件,这里是输出文件路径,表示数据将写入到这个文件中。

bs=2M: 指定块大小为 2MB。这是 dd 命令使用的读写的块的大小。

count=50: 指定要复制的块的数量。在这个例子中,将复制 50 个块,每个块大小为 2MB,因此总共复制了 100MB 的数据。

oflag=direct,nonblock: 这是 dd 命令的输出标志。direct 表示使用直接 I/O 模式,而 nonblock 表示非阻塞操作。直接 I/O 模式绕过文件系统缓存,直接读写硬盘。非阻塞操作表示不会阻塞等待,而是立即返回。

docker 运行结束后自动释放资源

参数 --rm

加上该参数在容器运行结束后,自动删除该容器,自动释放资源

[root@localhost ~]# docker run --help | grep rm
--rm     Automatically remove the container when it exits

加上该选项之后,sleep 10  指定启动容器后暂停十秒。十秒之后查看,该容器已自动删除   
[root@localhost ~]# docker run -it --rm --name test06 centos:7 sleep 10

举报

相关推荐

0 条评论