zoukankan      html  css  js  c++  java
  • Docker 容器资源限制

    Docker 容器资源限制

    默认情况下,一个容器并没有资源限制,并且该容器可以使用内核调度的所有资源。Docke提供了在启动容器时设置一些参数来控制该容器使用的内存、CPU和IO。

    内存

    OOME:在linux中,如果Linux内核发现宿主机没有足够的内存来调用执行系统的某些重要功能的时候,此时就会调用OOME(Out Of Memory Exception)来杀死某些进程,以此来释放内存。

    • 一旦发生OOME,任何进程都有可能被杀死,包括docker daemon,因此Docker调整了Docker daemon的OOM优先级,防止其被杀死,但是容器的OOM并没有调整,此时如何内存不够用时,内核就会根据自己的调度算法,给所有的进程进行一个评分,然后杀死分数最高的进程来释放内存。

    限制容器使用的内存资源

    -m or --memory=n : 限制一个容器可以使用的最大内存,单位(b,k,m,g)
    --memory-swap * : 限制一个容器可以使用的交换分区的大小,前提是必须先设置-m才能生效。
    --memory-swappiness:设置容器的swap控制行为。值为0-100
    --memory-reservation:设置内存的软限制
    --kernel-memory:设置核心内存的最大值
    --oom-kill-disable:是否阻止OOM 杀死容器,默认为否。
    

    --memory-swap的总结:
    --memory-swap --memory
    功能描述
    正数S 正数M 容器可以使用的总空间为S,ram为M,swap为(S-M),如果S=M,则没有swap资源
    0 正数M 相当于没有设置swap
    unset 正数M 如果Docker host启动了swap,则容器可用的 swap为2*M
    -1 正数M 如果Docker host启用了swap,则容器可以使用最大swap为Docker host上的所有swap空间的资源。
    在容器中,free所展现出来的swap分区是无效的

    CPU

    默认情况,每个容器都可以使用系统的所有CPU资源。但是我们可以通过使用CFS调度器来分配容器使用的CPU资源。
    CFS调度器配置

    --cpus=<value>:指定容器可以使用的CPU的核心数量
    --cpu-period=<value>: 指定CPU CFS的调度周期,默认是100ms
    --cpu-quota=<value>: 限制CPU CFS的配额。
    --cpuset-cpus: 限制使用的CPU的集合,如有四个CPU,0-3则代表全部可以使用;1,3表示可以使用第二个和第四个。
    --cpu-shares: 按比例切分CPU资源(CPU共享的权重)
    

    测试:

    使用docker提供的压测工具:docker pull lorel/docker-stress-ng
    使用方法:

    Example: stress-ng --cpu 8 --io 4 --vm 2 --vm-bytes 128M --fork 4 --timeout 10s
    

    这里使用--cpu-shares按照比例来切分CPU资源,3个容器使用的CPU占比为512、1024、2048,比例为1:2:4

    docker run --name stress -it --rm --cpu-shares 512 lorel/docker-stress-ng stree-ng --cpu 4
    docker run --name stress1 -it --rm --cpu-shares 1024 lorel/docker-stress-ng stree-ng --cpu 4
    docker run --name stress2 -it --rm --cpu-shares 2048 lorel/docker-stress-ng stree-ng --cpu 4
    # docker stats
    

    可以看到各个容器之间的cpu占比大概为1:2:4。

    作者:OneMore
    出处:https://www.cnblogs.com/dianel/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教。

  • 相关阅读:
    eclipse中文乱码问题解决方案
    修改Tomcat的JDK目录
    Tomcat 5.5 修改服务器的侦听端口
    HTML DOM教程 27HTML DOM Button 对象
    HTML DOM教程 24HTML DOM Frameset 对象
    Navicat for MySQL v8.0.27 的注册码
    HTML DOM教程 25HTML DOM IFrame 对象
    Tomcat 5.5 的下载和安装
    android manifest相关属性
    ubuntu10.04 下 eclipse 小结
  • 原文地址:https://www.cnblogs.com/dianel/p/9916104.html
Copyright © 2011-2022 走看看