文档章节

限制容器对内存的使用 - 每天5分钟玩转 Docker 容器技术(27)

CloudMAN
 CloudMAN
发布于 2017/06/12 06:56
字数 537
阅读 117
收藏 1

一个 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 内存。

运行结果如下:

129.png

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

  1. 分配 280M 内存。

  2. 释放 280M 内存。

  3. 再分配 280M 内存。

  4. 再释放 280M 内存。

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

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

130.png

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

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

docker run -it -m 200M ubuntu

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

内存限额就讨论到这里,下一节我们将学习如何限制容器对 CPU 资源的使用。

二维码+指纹.png

© 著作权归作者所有

共有 人打赏支持
CloudMAN
粉丝 509
博文 360
码字总数 221704
作品 0
海淀
数据收集利器 cAdvisor - 每天5分钟玩转 Docker 容器技术(82)

cAdvisor 是 google 开发的容器监控工具,我们来看看 cAdvisor 有什么能耐。 在 host 中运行 cAdvisor 容器。 docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/s......

CloudMan6
2017/10/18
0
0
用 Weave Scope 监控集群 - 每天5分钟玩转 Docker 容器技术(175)

创建 Kubernetes 集群并部署容器化应用只是第一步。一旦集群运行起来,我们需要确保一起正常,所有必要组件就位并各司其职,有足够的资源满足应用的需求。Kubernetes 是一个复杂系统,运维团...

cloudman6
05/31
0
0
如何用 Graylog 管理日志?- 每天5分钟玩转 Docker 容器技术(93)

上一节已经部署好了 Graylog,现在学习如何用它来管理日志。 首先启动测试容器。 docker run -d --log-driver=gelf --log-opt gelf-address=udp://localhost:12201 --log-opt tag="log-test...

CloudMan6
2017/11/13
0
0
Docker 如何支持多种日志方案?- 每天5分钟玩转 Docker 容器技术(88)

将容器日志发送到 STDOUT 和 STDERR 是 Docker 的默认日志行为。实际上,Docker 提供了多种日志机制帮助用户从运行的容器中提取日志信息。这些机制被称作 logging driver。 Docker 的默认 lo...

CloudMan6
2017/11/01
0
0
volume 方式使用 Secret - 每天5分钟玩转 Docker 容器技术(157)

Pod 可以通过 Volume 或者环境变量的方式使用 Secret,今天先学习 Volume 方式。 Pod 的配置文件如下所示: ① 定义 volume ,来源为 secret 。 ② 将 mount 到容器路径 ,可指定读写权限为 ...

cloudman6
04/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

安全管理标准

安全生产严重等级分类: 故障频次: 风险等级矩阵:

乔老哥
20分钟前
1
0
数据结构“树”的相关微视频

今天在腾讯视频上闲逛,然後发现一个叫“岚人”的用户上传了几段小视频,基本上都在5分钟以内,讲解了关于树的一些结构和算法。零代码,非常适合初学者入门。不过,对于老鸟来说,这也是非常...

Iridium
32分钟前
0
0
10-利用思维导图梳理JavaSE-Java 集合

10-利用思维导图梳理JavaSE-Java 集合 主要内容 1.Collection接口 2.Set接口 2.1.Set接口概述 2.2.HashSet类 2.3.TreeSet类 2.4.SortedSet接口 3.List接口 3.1.List接口概述 3.2.ArrayList类...

飞鱼说编程
43分钟前
3
0
活动推荐|互联网3.0与区块链新时代论坛(北京)

1 时间地点 **时间:**9月22日 14:00 - 18:00 地点:(北京海淀)西大街70号 3w咖啡 二层 2 活动详情 Harmony创始人Stephen及团队将介绍他们的区块链分片扩容技术。Stephen曾任Apple地图服务...

HiBlock
今天
1
0
如何优雅的删除Redis的大key

关于Redis大键(Key),我们从[空间复杂性]和访问它的[时间复杂度]两个方面来定义大键。前者主要表示Redis键的占用内存大小;后者表示Redis集合数据类型(set/hash/list/sorted set)键,所含有的...

IT--小哥
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部