docker - 内存争用时,超出软内存限制的 ECS 容器会怎样?
问题描述
假设我有一个具有 2G 内存的实例,以及一个具有 0.5G 软内存限制和 0.75G 硬内存限制的任务/容器。
该实例运行 3 个容器,每个容器消耗 0.6G 内存。现在需要添加第四个容器吗?3 个正在运行的容器会发生什么?他们的内存分配减少了吗?还是他们迁移到另一个实例?如果没有其他实例,会放置第 4 个容器吗?
我了解软硬 CPU 限制是如何工作的,因为 CPU 是一种动态资源(应用程序可以处理空闲 CPU 的峰值)。但是,在内存的情况下,您不能真正从已经在使用它的容器中取出内存。
解决方案
实际上,内存可以从正在运行的进程中回收。例如,内核可能会逐出由文件支持的内存(如进程本身的代码)。如果最终再次需要数据,内核可以将其分页。在这篇博文中对此进行了一些解释:https ://chrisdown.name/2018/01/02/in-defence-of-swap.html
如果任务安排在该节点上,但内核未能回收足够的内存以避免内存不足的情况,则其中一个进程将被内核杀死,docker 将检测并杀死容器,ECS 会注意到. 我不确定 ECS 是否会尝试在同一实例或不同实例上重新安排死任务。这可能取决于。
推荐阅读
- jenkins - 如何在 Allure-Report jenkins 插件上跳过报告文件生成?
- reactjs - 没有将 react-router 道具传递给我的组件
- sql - 从不同的表中选择条件
- c++ - 在cmake下为共享对象文件定位独立代码?
- c# - C# 方法使用“新”的多个约束
- python - 如何计算通过 poly_fit numpy、pandas 调整的 R2 和 R2
- python - Jupyter 笔记本异常
- reactjs - 从 react-beautiful-dnd 水平列表中删除单个项目
- r - R ggplot 如何显示两个变量的概率
- python - ImportError:没有名为 utils_datagen 的模块