Docker 资源控制

内存限额

概念介绍

  • 容器使用内存包括两个部分:物理内存和swap。docker通过以下两组参数来控制容器内存使用量
    1 -m或–memory:设置内存使用限额,例如100M,2G
    2 -memory-swap:设置内存+swap使用限额

操作实例

  • 我们可以使用progrium/stress镜像,该镜像可用于对容器进行压力测试。
  docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
  --vm 1:启动1个内存工作线程
  --vim-bytes 280M:每个线程分配280MB内存

如图所示:
在这里插入图片描述

如果超过--vm-bytes超过300M,stress就会报错
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 320M

在这里插入图片描述

  • 如果在启动容器时,只指定-m而不指定–memory-swap,那么–memory-swap默认是-m的两倍,也就是200M内存和200M的swap。
  • 内存使用限制
    docker run -itd --name test2 -m 512m centos /bin/bash
    通过docker stats查看
    在这里插入图片描述

CPU限额

概念介绍

  • 默认设置下,所有容器可以平等的使用CPU资源并且没有限制,docker可以通过-c或–cpu-shares设置CPU权重,如果不指定,默认值为1024。按权重分配CPU只会在资源紧张的情况下,一个容器空闲状态下,为了充分利用CPU资源,另一个也可以分配到全部可用的cpu。

操作实例

  1. 20%的限定
docker run -itd --name test1 --cpu-quota 20000 centos /bin/bash
  1. cpu压力测试
docker exec -it cc238216f3fb /bin/bash
yum install bc -y
echo "scale=5000; 4*a(1)" |bc -l -q(取圆周率后5000位。)
  • 打开top可以发现cpu最大资源利用率不会超过20%
  1. 按比例分配
    创建两个容器,设置容器权重,使得cpu资源使用率为33.3%与66.7%
docker run -itd --name c1 --cpu-shares 512 centos /bin/bash
docker run -itd --name c2 --cpu-shares 1024 centos /bin/bash
  1. 进入容器分别安装压测工具
yum install epel-release -y
yum install stress -y
stress -c 4进行压力测试
  • 打开另一个终端输入docker stats查看
    在这里插入图片描述
  • centos 8无法yum install stress,可以使用
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/s/stress-1.0.4-16.el7.x86_64.rpm
rpm -ivh stress-1.0.4-16.el7.x86_64.rpm
  1. 限制容器使用指定的cpu
docker run -itd --name test2 --cpuset-cpus 1,3 centos /bin/bash
  • 与上面相同进行压测,通过top命令按1查看cpu1,3是否为满值

Block IO带宽限额

概念介绍

  • Block IO是另一种可以限制容器的使用资源。Block IO指的是磁盘的读写,docker可以通过设置权重、限制bps与iops的方式控制容器读写磁盘的宽带。
  1. block IO权重
    默认情况下,所有容器平等地读写磁盘,可以通过设置–blkio-weight参数来改变block IO的优先级。默认值为500
    docker run -it --name test1 --blkio-weight 600 ubuntu
    docker run -it --name test2 --blkio-weight 300 ubuntu
  2. 限制bps和iops
    bps:byte per second,每秒读写的数据量
    iops:io per second,每秒IO次数
    –device-read-bps:限制读某个设备的bps
    –device-write-bps:限制写某个设备的iops
    –device-read-iops:限制读某个设备的bps
    –device-write-iops:限制写某个设备的iops

操作实例

  docker run -it --device-write-bps /dev/sda:30MB ubuntu
  time dd if=/dev/zero of=test.out bs=1M count=800 oflag=direct

在这里插入图片描述

  • 速度在30MB左右,一般不超过30MB/s
    oflag=direct指定用direct IO方式写文件,这样–device-write-bps才能生效。
    如果不作限制它的读写速度则会大大提高
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值