zoukankan      html  css  js  c++  java
  • docker内存限制

    默认docker容器可以使用宿主机所有的内存和CPU,我们可以通过 docker run 来限制内存和CPU的使用。

    有的系统内核不支持 Linux capabilities. 可以通过 docker info 命令来检查,如果系统内核不支持,会有如下报错

    WARNING: No swap limit support

    在linux主机上,如果kernel发现没有足够的内存了,会报出OOME或者Out Of Memory Exception,并且会kill 进程来释放内存,任何的进程都有可能会被kill,包括docker,这可能引起整个系统的宕机。

    docker尝试通过调整docker守护进程的OOM优先级来减轻风险,以便它比系统上的其他进程更不可能被杀死。

    选项 描述
    -m or --memory= 容器可使用最大内存,最小内存为4m,单位可以为 b,k,m,g
    --memory-swap* 容器可用于交换到硬盘的最大内存
    --memory-swappiness 默认情况下,容器的内核可以交换出一定比例的匿名页,设置为从 0 到 100,0表示关闭
    --memory-reservation 内存预留
    --kernel-memory 核心内存限制。最小为 4M
    --oom-kill-disable 是否阻止 OOM killer 杀死容器,默认没设置

    --memory-swap 介绍

    只有当--memory设置之后,--memory-swap 才会生效

    1、如果--memory-swap设置为正整数,那么这两个--memory和 --memory-swap必须设置。--memory-swap表示可以使用的内存和交换总量,并--memory控制非交换内存使用的数量。因此,如果--memory="300m"--memory-swap="1g",容器可以使用300m的内存和700m(1g - 300m)交换。

    2、如果--memory-swap设置为0,则忽略该设置,并将该值视为未设置。

    3、如果--memory-swap设置为与值相同的值--memory,并且--memory设置为正整数,则不使用swap

    4、如果--memory-swap未设置并且--memory--memory设置,则如果主机容器配置了交换内存,则容器可以使用两倍于设置的交换。例如,如果--memory="300m"--memory-swap未设置,容器可以使用300m的内存和600m的交换。

    5、如果--memory-swap明确设置为-1,则允许容器使用无限制交换,最多可达主机系统上可用的数量。

    防止容器使用交换

    如果--memory--memory-swap设置为相同的值,则可以防止容器使用任何交换。这是因为--memory-swap可以使用的组合内存和交换量,而--memory只是可以使用的物理内存量。

    --memory-swappiness 细节

    • 值为0将关闭匿名页面交换。
    • 值100将所有匿名页面设置为可交换。
    • 默认情况下,如果未设置--memory-swappiness,则值将从主机继承。

    --kernel-memory 细节

    内核内存限制以分配给容器的总内存表示。请考虑以下方案:

    • 无限内存,无限内核内存:这是默认行为。
    • 无限内存,有限内核内存:当所有cgroup所需的内存量大于主机上实际存在的内存量时,这是合适的。您可以将内核内存配置为永远不会覆盖主机上可用的内容,而需要更多内存的容器需要等待它。
    • 有限的内存,无限的内核内存:整体内存有限,但内核内存不受限制。
    • 有限的内存,有限的内核内存:限制用户和内核内存对于调试与内存相关的问题非常有用。如果容器正在使用意外数量的任一类型的内存,则它会耗尽内存而不会影响其他容器或主机。在此设置中,如果内核内存限制低于用户内存限制,则内核内存不足会导致容器遇到OOM错误。如果内核内存限制高于用户内存限制,则内核限制不会导致容器遇到OOM。

    当您打开任何内核内存限制时,主机会根据每个进程跟踪“高水位线”统计信息,因此您可以跟踪哪些进程(在本例中为容器)正在使用多余的内存。通过/proc/<PID>/status在主机上查看可以在每个过程中看到这一点

  • 相关阅读:
    SVN为什么比Git更好
    vim的高亮查找操作
    Mac利用PD虚拟机安装Centos7
    学习MapReduce的计算原理
    hadoop-HA高可用集群部署
    HDFS命令操作和高可用
    初识hadoop及伪集群部署
    初步学习nginx
    小记--------maxwell启动失败解决
    小记--------spark资源调度机制源码分析-----Schedule
  • 原文地址:https://www.cnblogs.com/cptao/p/10936256.html
Copyright © 2011-2022 走看看