首页 > 解决方案 > 内存争用时,超出软内存限制的 ECS 容器会怎样?

问题描述

假设我有一个具有 2G 内存的实例,以及一个具有 0.5G 软内存限制和 0.75G 硬内存限制的任务/容器。

该实例运行 3 个容器,每个容器消耗 0.6G 内存。现在需要添加第四个容器吗?3 个正在运行的容器会发生什么?他们的内存分配减少了吗?还是他们迁移到另一个实例?如果没有其他实例,会放置第 4 个容器吗?

我了解软硬 CPU 限制是如何工作的,因为 CPU 是一种动态资源(应用程序可以处理空闲 CPU 的峰值)。但是,在内存的情况下,您不能真正从已经在使用它的容器中取出内存。

标签: dockeramazon-ecs

解决方案


实际上,内存可以从正在运行的进程中回收。例如,内核可能会逐出由文件支持的内存(如进程本身的代码)。如果最终再次需要数据,内核可以将其分页。在这篇博文中对此进行了一些解释:https ://chrisdown.name/2018/01/02/in-defence-of-swap.html

如果任务安排在该节点上,但内核未能回收足够的内存以避免内存不足的情况,则其中一个进程将被内核杀死,docker 将检测并杀死容器,ECS 会注意到. 我不确定 ECS 是否会尝试在同一实例或不同实例上重新安排死任务。这可能取决于。


推荐阅读