• docker容器资源配额


    1.docker 容器控制CPU

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

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

    # 查看配置份额命令:docker run --help | grep cpu-shares
    
    -c, --cpu-shares int                 CPU shares (relative weight)
    
    CPU shares在创建容器时指定容器所使用的cpu份额值。cpu-shares的值不能保证可以获得1个vcpu或者多少GHz的cpu资源,仅仅只是一个弹性的加权值
    默认每个docker容器的cpu份额值都是1024,在同一个cpu核心上,同时运行多个容器,容器的cpu加权效果才能体现出来
    例如:2个容器A、B的cpu份额是1000和500,结果:
        1.A和B正常运行,占用同一个CPU,在cpu进行时间片分配的时候,容器A比容器B多一倍机会获得CPU的时间片;
        2.如果A的进程一直是空闲的,那么容器B时可以获取比容器A更多的CPU时间片
    例:给容器示例分配512权重的cpu使用份额
    参数:--cpu-shares 512
    命令:docker run -it --cpu-shares 512 centos /bin/bash
    查看是否设置成功:进入容器内:cat /sys/fs/cgroup/cpu/cpu.shares

    1.2 cpu core核心控制

    参数:--cpuset 可以绑定CPU
    对多核CPU服务器,docker可以控制容器运行限定使用哪些cpu内核和内存节点,--cpuset-cpus 和 --cpuset-mems 参数设置,对具有NUMA拓扑(有多CPU、多内存)的服务器尤其有用,可以对需要高性能计算的容器进行性能最优的配置
    
    补充扩展:
    服务器架构一般分:SMP、NUMA、MPP体系结构
    1.对称多处理器结构()SMP),例:x86服务器,双路服务器,主板上有2个物理cpu
    2.非一致存储访问结构(NUMA),例:IBM小型机Pseries 690
    3.海量并行处理结构(MPP),例:大型机Z14

    测试方法:将cpu都绑定到同一个核心上,运行stress,然后使用taskset绑定CPU
    Stress:linux系统压力测试软件,可以直接yum install stress -y 安装,epel源里有

    例:2个cpu进程,2个io进程,20s后停止运行
    stress -c 2 -i 2 --verbose --timeout 20s
    实验:
    #容器名stress10运行在0和1的cpu上
    docker run -itd --name stress10 --cpuset-cpus 0,1 --cpu-shares 512 centos /bin/bash
    docker run -itd --name stress20 --cpuset-cpus 0,1 --cpu-shares 1024 centos /bin/bash
    容器内安装epel源:yum install epel-release -y和yum install stress -y,然后运行stress命令进行测试,将cpu占满查看top情况

    2. docker容器控制内存

    参数:-m    -m, --memory bytes                   Memory limit
    例1:允许容器使用的内存上限为128M
    >docker run -it -m 128m centos
    查看:cat /sys/fs/cgroup/memory/memory.limit_in_bytes
    
    # 可以使用tress进行测试
    例2:创建一个docker,只使用2个cpu核心,使用128M内存
    docker run -it --cpuset-cpus 0,1 -m 128m centos

    3.docker容器控制IO

    [root@node2 ~]# docker run --help| grep write-b
          --device-write-bps list          Limit write rate (bytes per second) to a device (default [])
    # 限制此设备上读速度,单位可以是kb、mb或gb
    情景:防止某个docker容器吃光磁盘的I/O资源
    例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命令的数据

    4.docker容器运行结束后自动释放资源

          --rm                             Automatically remove the container when it exits
    用途:当容器命令运行结束后,自动删除容器,自动释放资源
  • 相关阅读:
    BICGSTAB不收敛的坑!!
    python中复制的坑
    安装git
    notion快捷键
    PC微信3.60版小程序无法抓包如何解决(fiddler抓包)
    【施工中】双非考研上岸上海985计算机经历分享
    关于CPU个数、核数、线程数的理解
    几个性能问题的记录
    跨域无效问题解决(java后端方案)
    华硕笔记本,固态硬盘、U盘不能识别!
  • 原文地址:https://www.cnblogs.com/yangmeichong/p/16447017.html
Copyright © 2020-2023  润新知