博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第 4 章 容器 - 027 - 限制容器对内存的使用
阅读量:6793 次
发布时间:2019-06-26

本文共 3370 字,大约阅读时间需要 11 分钟。

限制容器对内存的使用

一个 docker host 上会运行若干容器,每个容器都需要 CPU、内存和 IO 资源。

对于 KVM,VMware 等虚拟化技术,用户可以控制分配多少 CPU、内存资源给每个虚拟机。

对于容器,Docker 也提供了类似的机制避免某个容器因占用太多资源而影响其他容器乃至整个 host 的性能。

 

内存限额

容器可使用的内存包括两部分:

  • 物理内存
  • swap

 

Docker 通过下面两组参数来控制容器内存的使用量。

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

 

举例:

docker run -m 200M --memory-swap=300M ubuntu
  • 允许该容器最多使用 200M 的内存和 100M 的 swap。
  • 默认情况下,上面两组参数为 -1,即对容器内存和 swap 的使用没有限制。

  注:progrium/stress 镜像可用于对容器执行压力测试。

  • --vm 1:启动 1 个内存工作线程。
  • --vm-bytes 280M:每个线程分配 280M 内存。
1 root@ubuntu:~# docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M 2 Unable to find image 'progrium/stress:latest' locally 3 latest: Pulling from progrium/stress 4 a3ed95caeb02: Pull complete  5 871c32dbbb53: Pull complete  6 dbe7819a64dd: Pull complete  7 d14088925c6e: Pull complete  8 58026d51efe4: Pull complete  9 7d04a4fe1405: Pull complete 10 1775fca35fb6: Pull complete 11 5c319e267908: Pull complete 12 Digest: sha256:e34d56d60f5caae79333cee395aae93b74791d50e3841986420d23c2ee4697bf13 Status: Downloaded newer image for progrium/stress:latest14 WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.15 stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd16 stress: dbug: [1] using backoff sleep of 3000us17 stress: dbug: [1] --> hogvm worker 1 [6] forked18 stress: dbug: [6] allocating 293601280 bytes ...19 stress: dbug: [6] touching bytes in strides of 4096 bytes ...20 stress: dbug: [6] freed 293601280 bytes21 stress: dbug: [6] allocating 293601280 bytes ...22 stress: dbug: [6] touching bytes in strides of 4096 bytes ...23 stress: dbug: [6] freed 293601280 bytes24 stress: dbug: [6] allocating 293601280 bytes ...25 stress: dbug: [6] touching bytes in strides of 4096 bytes ...26 stress: dbug: [6] freed 293601280 bytes27 stress: dbug: [6] allocating 293601280 bytes ...
  1. 分配 280M 内存。
  2. 释放 280M 内存。
  3. 再分配 280M 内存。
  4. 再释放 280M 内存。
  5. 一直循环......

 

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

1 root@ubuntu:~# docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 380M 2 WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. 3 stress: info: [1] dispatching hogs: 0 cpu, 0 io, 1 vm, 0 hdd 4 stress: dbug: [1] using backoff sleep of 3000us 5 stress: dbug: [1] --> hogvm worker 1 [6] forked 6 stress: dbug: [6] allocating 398458880 bytes ... 7 stress: dbug: [6] touching bytes in strides of 4096 bytes ... 8 stress: dbug: [6] freed 398458880 bytes 9 stress: dbug: [6] allocating 398458880 bytes ...10 stress: dbug: [6] touching bytes in strides of 4096 bytes ...11 stress: dbug: [6] freed 398458880 bytes12 stress: dbug: [6] allocating 398458880 bytes ...13 stress: dbug: [6] touching bytes in strides of 4096 bytes ...14 stress: dbug: [6] freed 398458880 bytes15 stress: dbug: [6] allocating 398458880 bytes ...
  • 分配的内存超过限额,stress 线程报错,容器退出。

ps:docker host 未设置swap 则不支持限制内存swap 

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

比如:docker run -it -m 200M ubuntu  容器最多使用 200M 物理内存和 200M swap。

 

--------------引用来自---------------

https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587660&idx=1&sn=9b2b36c378026cad974913e537e84aa4&chksm=8d3080d5ba4709c3b0efa550c89e511099a913746dc5d6ac3d38e925dd7663dac4f6d692c691&scene=21#wechat_redirect

转载于:https://www.cnblogs.com/gsophy/p/10306789.html

你可能感兴趣的文章
Vim for C Programmers
查看>>
第六章 嫉妒、欺骗、背叛
查看>>
【未解决】js对象字面量、eval()方法
查看>>
安装php加速器Zend guard loader出现无法加载,没有找到php5.dll 的错误
查看>>
关于OpenCV 3.1的搭建使用经验
查看>>
唯品会的订单分库分表实践总结以及关键步骤
查看>>
solaris 开启ftp服务 通过xftp登陆ftp服务器
查看>>
explorer.exe
查看>>
maven 发布项目到docker
查看>>
我的友情链接
查看>>
sed 详细用法
查看>>
保护你的/wp-admin/文件夹
查看>>
tk.mapper 通用 mapper 动态表名查询
查看>>
12个优秀的国外Material Design网站案例
查看>>
MYSQL添加用户、建表、权限
查看>>
java之抽象类
查看>>
[2]工欲善其事必先利其器-------UML中的几种常见关系(二)
查看>>
一些二进制问题的巧妙方法
查看>>
iOS开发 - 如何获取设备的总容量和可用容量 网络运营商 3g/wifi判断 手机型号
查看>>
【在他乡】好用,用好MindManager
查看>>