zoukankan      html  css  js  c++  java
  • 25-限制容器对内存的使用

    一个 docker host 上会运行若干容器,每个容器都需要 CPU、内存和 IO 资源。对于 KVM,VMware 等虚拟化技术,用户可以控制分配多少 CPU、内存资源给每个虚拟机。对于容器,Docker 也提供了类似的机制避免某个容器因占用太多资源而影响其他容器乃至整个 host 的性能。

    内存限额

    与操作系统类似,容器可使用的内存包括两部分:物理内存和 swap。 Docker 通过下面两组参数来控制容器内存的使用量。

    1. -m 或 --memory:设置内存的使用限额,例如 100M, 2G。

    2. --memory-swap:设置 内存+swap 的使用限额。

    当我们执行如下命令:

    docker run -m 200M --memory-swap=300M ubuntu

    其含义是允许该容器最多使用 200M 的内存和 100M 的 swap。默认情况下,上面两组参数为 -1,即对容器内存和 swap 的使用没有限制。

    下面我们将使用 progrium/stress 镜像来学习如何为容器分配内存。该镜像可用于对容器执行压力测试。执行如下命令:

    docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M

    --vm 1:启动 1 个内存工作线程。

    --vm-bytes 280M:每个线程分配 280M 内存。

    运行结果如下:

    WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.

    vim /etc/default/grub

    GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

    然后:update-grub

    重启系统

    因为 280M 在可分配的范围(300M)内,所以工作线程能够正常工作,其过程是:

    1. 分配 280M 内存。

    2. 释放 280M 内存。

    3. 再分配 280M 内存。

    4. 再释放 280M 内存。

    5. 一直循环......

    如果让工作线程分配的内存超过 300M,结果如下:

    分配的内存超过限额,stress 线程报错,容器退出。

    如果在启动容器时只指定 -m 而不指定 --memory-swap,那么 --memory-swap 默认为 -m 的两倍,比如:

    docker run -it -m 200M ubuntu

    容器最多使用 200M 物理内存和 200M swap。

  • 相关阅读:
    博客园
    未释放的已删除文件
    ssh连接缓慢
    剑指 Offer 38. 字符串的排列
    剑指 Offer 37. 序列化二叉树
    剑指 Offer 50. 第一个只出现一次的字符
    剑指 Offer 36. 二叉搜索树与双向链表
    剑指 Offer 35. 复杂链表的复制
    剑指 Offer 34. 二叉树中和为某一值的路径
    剑指 Offer 33. 二叉搜索树的后序遍历序列
  • 原文地址:https://www.cnblogs.com/mkxfs/p/10911482.html
Copyright © 2011-2022 走看看