AWS ECS任务内存硬和软限制

时间:2017-06-26 16:18:45

标签: amazon-web-services memory cluster-computing amazon-ecs

我对ECS任务定义的硬内存和软内存限制的目的感到困惑。

IIRC软限制是调度程序在一个实例上为任务运行预留的内存量,硬限制是容器在被谋杀之前可以使用多少内存。

我的问题是,如果ECS调度程序根据软限制将任务分配给实例,则可能出现这样的情况,即使用高于软限制但低于硬限制的内存的任务可能导致实例超过其最大值内存(假设所有其他任务使用的内存略低于或等于其软限制)。

这是对的吗?

由于

1 个答案:

答案 0 :(得分:33)

如果您希望运行的计算工作负载主要是内存绑定而不是CPU绑定,那么您应该只使用硬限制,而不是软限制。来自文档:

  

您必须为容器定义中的一个或两个内存或memoryReservation指定非零整数。如果同时指定两者,则内存必须大于memoryReservation。如果指定memoryReservation,则从放置容器的容器实例的可用内存资源中减去该值;否则,使用内存的值。

http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html

通过仅为任务指定硬内存限制,可以避免内存不足,因为ECS会停止在实例上放置任务,并且docker会杀死任何试图超过硬限制的容器。

软内存限制功能专为CPU绑定应用而设计,您希望保留较小的内存(软限制),但允许偶尔突发达到硬限制。在这种类型的CPU繁重工作负载中,您并不真正关心容器的内存使用的特定值,因为容器在耗尽实例内存之前很久就会用完CPU,因此您可以放置​​任务基于CPU预留和软内存限制。在这种设置中,硬限制只是在失控或存在内存泄漏的情况下的故障保护。

总而言之,您应该使用负载测试来评估您的工作负载,并查看它是否会先耗尽CPU或内存不足。如果您受CPU限制,那么您可以将软内存限制与可选的硬限制一起使用,就像故障保护一样。如果你是内存绑定,那么你将只需要使用没有软限制的硬限制。