• docker Cgroup资源控制


    目录

    1. Cgroup

    2. Cgroup四种特性

    3.控制CPU使用率

    3.1 通过文件控制cpu使用率

    3.2 通过命令修改

    3.3 设置多个容器资源比

    3.5 绑核

    4.控制内存使用率


    1. Cgroup

    cgroup,是一个非常强大的linux内核工具,他不仅可以限制被namespace 隔离起来的资源,
    还可以为资源设置权重、计算使用量、操控进程启停等等。所以cgroups/ (Control groups)实现了对资源的配额和度量。

    2. Cgroup四种特性

    • 资源限制:可以对任务使用的资源总额进行限制

    • 优先级分配:通过分配的cpu时间片数量以及磁盘Io带宽大小,实际上相当于控制了任务运行优先级

    • 资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等

    • 任务控制: cgroup可以对任务执行挂起、恢复等操作

    3.控制CPU使用率

    控制CPU几个命令

    • --cpu-period    设置调度周期时间  1000~1000000
    • --cpu-quota     设置容器进程的CPU占用时间,要与调度周期时间成正比
    • --cpu-shares   设置多个容器之间的cpu资源占用比
    • --cpuset-cpus  绑核(cpu编号从0开始)

    3.1 通过文件控制cpu使用率

    首先启动一个容器,镜像为centos7,命名为test1 

    启动成功之后进入/sys/fs/cgroup/cpu/docker/

    该目录中存放各个容器的cpu管理文件,找到容器对应的id号,进入

    进入之后修改period和quota文件

    默认情况下文件内容为 100000和-1      -1代表不做任何限制

    我们通过编写一个死循环脚本来查看默认情况下的cpu使用情况

     运行脚本,并查看此时cpu的使用率

    重新打开一个终端

     此时修改quota文件,以period文件值作为指示值,以比例的形式修改quota文件值

    这里修改为50000,相较于period文件的100000为50%

     修改完之后,再次进入镜像执行脚本

     3.2 通过命令修改

     重新创建一个容器名为test2  ,在创建的时候指定该容器的cpu使用率在50%

    同样,编写脚本测试

    可以看到此时cpu的使用率在50%左右,我还可以通过docker stats命令来查看容器的使用情况 

     命令显示此时的test2容器,他的使用率在50%左右

    3.3 设置多个容器资源比

    使用--cpu-shares命令可以控制多个容器之间的cpu资源比

    重新开两个终端并分开新建容器

    每个Docker容器的CPU份额都是1024,单独一个容器的份额是没有意义的,只有在同时运行多个容器时,容器CPU的加权效果才能体现出来

    3.5 绑核

    在运行容器的时候,为容器指定cpu

    4.控制内存使用率

    大致方法于cpu控制相同

    1. 与操作系统类似,容器可使用的内存包括两部分:物理内存和 Swap'
    2. -m 或 --memory:设置内存的使用限额'
    3. --memory-swap:设置内存+swap 的使用限额'
    4. --
    5. docker run -itd -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
    6. #--vm 1:启动1个内存工作线程'
    7. #--vm-bytes 280M:每个线程分配280M内存'
    8. --
    9. #相应的Cgroup配置文件:/sys/fs/cgroup/memory/memory.limit_in_bytes
    10. docker run -itd -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
    11. #如果让工作线程分配的内存超过300M,分配的内存超过了限额,stress线程会报错,容器退出
    12. --
    13. 注意!一旦容器Cgroup使用的内存超过了限制的容量,Linux内核就会尝试收回这些内存'
    14. 如果仍旧无法控制内存使用在这个设置的范围之内,就会杀死该进程!'

  • 相关阅读:
    如何做好文献阅读及笔记整理
    What is a TCP SYN Flood DDoS Attack?
    mysql兼容微信表情
    塔望食观察 | 中国海参产业发展现状及挑战
    数据结构之-队列实现
    Spring注解解析 | P/C命名空间
    (windows10)设置环境变量简化EVOSUITE的运行
    自身免疫疾病诊断原料厂家——博迈伦
    新特性解读 | MySQL 8.0 GIPK 不可见主键
    苹果手机H5 video标签播放视频问题以及.mov格式处理方案
  • 原文地址:https://blog.csdn.net/kid00013/article/details/125467723