千家信息网

Docker怎么限制容器可用的内存

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,小编给大家分享一下Docker怎么限制容器可用的内存,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!为什么要限制容器对内存的使用?限制容器不能过多的使用主机的内存是非常重要的。对于 l
千家信息网最后更新 2025年02月07日Docker怎么限制容器可用的内存

小编给大家分享一下Docker怎么限制容器可用的内存,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

为什么要限制容器对内存的使用?

限制容器不能过多的使用主机的内存是非常重要的。对于 linux 主机来说,一旦内核检测到没有足够的内存可以分配,就会扔出 oome(out of memmory exception),并开始杀死一些进程用于释放内存空间。糟糕的是任何进程都可能成为内核猎杀的对象,包括 docker daemon 和其它一些重要的程序。更危险的是如果某个支持系统运行的重要进程被干掉了,整个系统也就宕掉了!这里我们考虑一个比较常见的场景,大量的容器把主机的内存消耗殆尽,oome 被触发后系统内核立即开始杀进程释放内存。如果内核杀死的第一个进程就是 docker daemon 会怎么样?结果是所有的容器都不工作了,这是不能接受的!

针对这个问题,docker 尝试通过调整 docker daemon 的 oom 优先级来进行缓解。内核在选择要杀死的进程时会对所有的进程打分,直接杀死得分最高的进程,接着是下一个。当 docker daemon 的 oom 优先级被降低后(注意容器进程的 oom 优先级并没有被调整),docker daemon 进程的得分不仅会低于容器进程的得分,还会低于其它一些进程的得分。这样 docker daemon 进程就安全多了。

我们可以通过下面的脚本直观的看一下当前系统中所有进程的得分情况:

?

1 2$ docker run -it --rm -m 300m --memory-swap=300m u-stress /bin/bash# stress --vm 1 --vm-bytes 500m

demo 中容器的物理内存被限制在 300m,但是进程却希望申请到 500m 的物理内存。在没有 swap 可用的情况下,进程直接被 oom kill 了。如果有足够的 swap,程序至少还可以正常的运行。

我们可以通过 --oom-kill-disable 选项强行阻止 oom kill 的发生,但是笔者认为 oom kill 是一种健康的行为,为什么要阻止它呢?

除了限制可用 swap 的大小,还可以设置容器使用 swap 的紧迫程度,这一点和主机的 swappiness 是一样的。容器默认会继承主机的 swappiness,如果要显式的为容器设置 swappiness 值,可以使用 --memory-swappiness 选项。

看完了这篇文章,相信你对"Docker怎么限制容器可用的内存"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

原文链接:http://www.cnblogs.com/sparkdev/p/8032330.html

进程 容器 内存 限制 主机 内核 得分 系统 重要 优先级 可以通过 情况 物理 程序 篇文章 调整 运行 最高 糟糕 健康 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 交通运输网络安全体系 北航二等学业奖学金网络安全学院 医保服务器网络连接不通 imac电脑取消代理服务器设置 西门子读取配方中文本数据库 网络安全改革探究 网络技术课程ppt 科东网络安全监测装置优点 数据库设计必须经过哪四个过程 河南口碑好的软件开发 第三方网络技术优点 帆软怎么连接数据库 国内的做网络安全的公司排名 数据库事件表 三级网络技术未来教育百度云 简述数据库建立的流程 网络安全少年说小提案 网络安全检查清除浏览器账号密码 xbox战地怎么换服务器 戴尔r240服务器导轨出不来 网络安全师证有用吗 网络安全跟安全测试一样的区别 无线软件开发价钱 网络技术公司架构 服务器都可以干什么 榆林谱诺助业软件开发有限公司 中国台湾开源软件开发系统 服务器在别人那里安全吗 爬虫可以爬软件开发数据吗 戴尔r240服务器导轨出不来
0