代码之家  ›  专栏  ›  技术社区  ›  EugeneMi

当存在内存争用时,超过软内存限制的ECS容器会发生什么情况?

  •  0
  • EugeneMi  · 技术社区  · 7 年前

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

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   mohit    7 年前

    第四个容器将无法生成,您将得到以下错误。

    (service sample) was unable to place a task because no container instance met all of its requirements. The closest matching (container-instance 05016874-f518-4b7a-a817-eb32a4d387f1) has insufficient memory available. For more information, see the Troubleshooting section of the Amazon ECS Developer Guide.
    

    如果要调度第四个容器,需要再添加一个ecs实例。所有其他3个集装箱将处于稳定状态。集群中没有发生类似内存分配减少的情况。如果没有实例,您的服务将始终处于不稳定状态,并继续给您上述错误。

    裁判: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html

        2
  •  0
  •   Chris Hundt    6 年前

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

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

    推荐文章