|NO.Z.00018|——————————|CloudVirtualiZation|——|Cloud&资源限制.V01|——|内存资源限制|
一、课程大纲
### --- 课程提示:
~~~ 默认情况下,docker会尽可能的去榨干我们的资源,CPU/内存/磁盘I/O;
~~~ 若是docker的某一个进程出现问题,它会无休止的去向我们的宿主机去释放资源。
~~~ 造成我们的应用停止或者是进程关闭,出现比较核心的故障。
~~~ 对于真正的生产环境来说,容器的资源限制必须设置的。
二、内存资源限制
### --- 内存资源限制:重点提示
~~~ CGroup是Control Groups的缩写,
~~~ 是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)
~~~ 所使用的物理资源(如CPU memory i/o等等)的机制。
~~~ 2007年进入linux2.6.24内核,CGroups不是全新创造的,
~~~ 他将进程管理从CPUset中剥离出来,作者是Google的Paul Menage
### --- 默认情况下,如果不对容器做任何限制,容器能够占用当前系统能给提供的所有资源
~~~ Docker 限制可以从Memory、CPU、Block I/O三个方面
~~~ # OOME:
~~~ Out Of Memory Exception(内存不足)(内存自身的保护机制)
~~~ 一旦发生OOME,任何进程都可能被杀死,包括docker daemon在内
~~~ 为此,Docker调整了docker daemon的OOM优先级,以免被内核关闭
### --- 内存资源限制:
~~~ CGroup是容器资源技术;
~~~ 限制方面可以从内存/CPU/BlockI/O角度出手;
~~~ 若是不对容器进行限制,容器会使用我们宿主机的所有资源的,造成宿主机资源不够使用;
~~~ 会启动OOME机制,内核才可以启动OOME机制。
~~~ 为了防止OOME会误删除docker容器,所以docker daemon的优先级比较高,
~~~ 不会被删除,但是我们启动的一些容器,有可能会被随机删除。
~~~ 比如MySQL,LNMP,所以对内存的限制使我们常去做的操作。
~~~ 为应用做内存压力测试,理解正常业务需求下使用的内存情况,
~~~ 然后才能进入生产环境使用一定要限制容器的内存使用上限
~~~ 尽量保证主机的资源充足,一旦通过监控发现资源不足,就进行扩容或者对容器进行迁移
~~~ 如果可以(内存资源充足的情况),尽量不要使用SWAP,SWAP的使用会导致内存计算复杂,
~~~ 对调度器非常不友好。
三、设置方式
### --- 设置方式
~~~ 在docker启动参数中,和内存限制有关的包括(参数的值一般是内存大小,也就是一个整数,
~~~ 后面跟着内存单位b/k/m/g分别对应bytes/kb/mb/gb
~~~ -m --memory:容器能使用的最大内存大小,最小值为4m
~~~ --memory-swap:容器能够使用的SWAP大小
~~~ --memory-swappiness: 默认情况下,
~~~ 主机可以把容器使用的匿名页(anonymous page)swap出来,
~~~ 你可以设置一个0-100之间的值,代表允许swap出来的比例
~~~ --memory-reservation:设置一个内存使用的soft limit,设置值小于-m设置
~~~ --kernel-memory:容器能够使用的kenel大小,最小值为4m
~~~ --oom-kill-disable:是否运行OOM的时候杀死进程,
~~~ 只有设置了-m才可以把这个选项设置为false,否则容器会耗尽主机内存,
~~~ 而且导致主机应用被杀死。
四、设置解释:memory-swap设置为0默认使用的memory的2*M(2倍)

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
cdv011-docker
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」