首页 > 其他分享 >docker资源配额

docker资源配额

时间:2022-11-21 18:02:41浏览次数:65  
标签:容器 -- CPU 内存 配额 docker cpu 资源

百度网盘链接:https://pan.baidu.com/s/15t_TSH5RRpCFXV-93JHpNw?pwd=8od3  提取码:8od3

7 docker资源配额

7.1 docker容器控制cpu

Docker通过cgroup来控制容器使用的资源限制,可以对docker限制的资源包括CPU 内存 磁盘。

7.1.1  指定docker容器可以使用的cpu份额

查看配置份额的帮助命令:

# docker run --help | grep cpu-shares

cpu配额参数:-c, --cpu-shares int 

例:给容器实例分配512权重的cpu使用份额

# docker run -it --cpu-shares 512 centos  /bin/bash

$ cat /sys/fs/cgroup/cpu/cpu.shares  #查看结果:512

 

在 host 中启动了两个容器:

# docker run --name "container_A" -c 1024 ubuntu

# docker run --name "container_B" -c 512 ubuntu

container_A 的 cpu share 1024,是 container_B 的两倍。当两个容器都需要 CPU 资源时,container_A 可以得到的 CPU 是 container_B 的两倍。

需要注意的是,这种按权重分配 CPU只会发生在 CPU资源紧张的情况下。如果 container_A 处于空闲状态,为了充分利用 CPU资源,container_B 也可以分配到全部可用的 CPU。

7.1.2  CPU core核心控制

参数:--cpuset可以绑定CPU

对多核CPU的服务器,docker还可以控制容器运行限定使用哪些cpu内核和内存节点,即使用--cpuset-cpus和--cpuset-mems参数。对具有NUMA拓扑(具有多CPU 多内存节点)的服务器尤其有用,可以对需要高性能计算的容器进行性能最优的配置。如果服务器只有一个内存节点,则--cpuset-mems的配置基本上不会有明显效果。

7.1.3  CPU配额控制参数的混合使用

在上面这些参数中,cpu-shares控制只发生在容器竞争同一个cpu的时间片时有效。

测试cpu-shares和cpuset-cpus混合使用运行效果,就需要一个压缩力测试工具stress来让容器实例把cpu跑满。

# yum -y install epel-release

# yum -y install stress

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 

 

运行两个容器实例

# docker run -itd --name docker10 --cpuset-cpus 0,1 --cpu-shares 512 centos /bin/bash

# docker run -itd --name docker20 --cpuset-cpus 0,1 --cpu-shares 1024 centos /bin/bash

 

测试1: 进入docker10,使用stress测试进程是不是只在cpu0,1上运行:

# docker exec -it  docker10  /bin/bash

$  yum install -y epel-release  #安装epel扩展源

$ yum install stress -y    #安装stress命令

$ stress -c 2 -v  -t 10m   #运行2个进程,把两个cpu占满

通过top命令可看到正常只在cpu0,1上运行。

 

测试2: 进入docker20,使用stress测试进程是不是只在cpu0,1上运行,且docker20上运行的stress使用cpu百分比是docker10的2倍

# docker exec -it  docker20  /bin/bash

$ yum install -y epel-release  #安装epel扩展源

$ yum install stress -y  

$ stress  -c 2 -v -t 10m

在另外一个虚拟终端上运行top命令,按1快捷键,查看每个cpu使用情况

7.2 docker容器控制内存

Docker提供参数-m, --memory=""限制容器的内存使用量。

例1:允许容器使用的内存上限为128M:

# docker run -it  -m 128m centos

$ cat /sys/fs/cgroup/memory/memory.limit_in_bytes

134217728

注:也可以使用tress进行测试。

例2:创建一个docker,只使用2个cpu核心,只能使用128M内存

# docker run -it --cpuset-cpus 0,1 -m 128m centos

7.3 docker容器控制IO

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

--device-read-bps value

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

--device参数:将主机设备添加到容器

# mkdir -p /var/www/html/

# docker run -it -v /var/www/html/:/var/www/html --device /dev/sda:/dev/sda --device-write-bps /dev/sda:2mb centos /bin/bash

$ time dd if=/dev/sda of=/var/www/html/test.out bs=2M count=50 oflag=direct,nonblock

注:dd 参数:

direct:读写数据采用直接IO方式,不走缓存。直接从内存写硬盘上。

nonblock:读写数据采用非阻塞IO方式,优先写dd命令的数据。

标签:容器,--,CPU,内存,配额,docker,cpu,资源
From: https://www.cnblogs.com/KrillLiszt/p/16912172.html

相关文章

  • docker私有镜像仓库harbor
    百度网盘链接:https://pan.baidu.com/s/15t_TSH5RRpCFXV-93JHpNw?pwd=8od3 提取码:8od38docker私有镜像仓库harborHarbor介绍Docker容器应用的开发和运行离不开可靠的......
  • docker运行jar包
    1.将jar包传到服务器2.在jar包的同路径下新建一个dockerfile(内容如下)FROMjava:8#Defaultputyourapplicationpackageinto/home/admin/app/ENVAPP_BASE/home......
  • 基于dockerfile构建镜像
    百度网盘链接:https://pan.baidu.com/s/15t_TSH5RRpCFXV-93JHpNw?pwd=8od3 提取码:8od34基于dockerfile构建镜像4.1dockerfile语法详解Dockerfile是一个用来构建镜像......
  • docker数据持久化
    百度网盘链接:https://pan.baidu.com/s/15t_TSH5RRpCFXV-93JHpNw?pwd=8od3 提取码:8od35docker数据持久化5.1docker容器的数据管理5.1.1Docker容器的数据卷数据卷是......
  • docker容器互联
    百度网盘链接:https://pan.baidu.com/s/15t_TSH5RRpCFXV-93JHpNw?pwd=8od3 提取码:8od36docker容器互联6.1docker容器的网络基础6.1.1docker01.安装docker的时候,会......
  • 1、Docker最新入门教程-Docker概述
    1.Docker概述Docker是一个用于开发、运输和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,以便您可以快速交付软件。使用Docker,您可以像管理应用程......
  • 温故知新,遇见WPF/WinForms,界面过早触发,导致WPF视觉树元素未初始化出现找不到的情况(资
    报错今天在WPF中,从入口程序去引用一个类库中的资源字典样式,运行时提示找不到,但是设计时好好的,看了很久,迟迟找不到原因。内部异常1:Exception:无法找到名为“redBtn”......
  • docker、nginx、jar
    windows修改nginx配置文件后,重启nginx命令之前每次改配置文件,为了让修改后的配置生效都要在任务栏中找nginx杀进程,太麻烦了nginx-sreloadjava-jar参数不生效,是因......
  • Docker run 命令
    dockerrun:创建一个新的容器并运行一个命令语法dockerrun[OPTIONS]IMAGE[COMMAND][ARG...]OPTIONS说明:-astdin: 指定标准输入输出内容类型,可选STDIN/STDOUT......
  • docker-compose.yml 使用说明
    docker-compose.yml结构docker-compose.yml文件分为三个主要部分:services、networks、volumes.。services主要用来定义各个容器。networks定义需要使用到的net......