AWS ECS 任务内存硬限制和软限制

Posted

技术标签:

【中文标题】AWS ECS 任务内存硬限制和软限制【英文标题】:AWS ECS Task Memory Hard and Soft Limits 【发布时间】:2017-11-29 13:18:16 【问题描述】:

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

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

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

这是正确的吗?

谢谢

【问题讨论】:

【参考方案1】:

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

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

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

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

软内存限制功能专为 CPU 密集型应用程序而设计,在这些应用程序中,您希望保留少量内存(软限制),但允许偶尔突增至硬限制。在这种类型的 CPU 繁重的工作负载中,您并不真正关心容器的内存使用的具体值,因为容器在耗尽实例内存之前很久就会耗尽 CPU,因此您可以根据CPU 预留和软内存限制。在此设置中,硬限制只是一种故障保护,以防出现失控或内存泄漏。

因此,总而言之,您应该使用负载测试来评估您的工作负载,看看它是先用完 CPU 还是先用完内存。如果您受 CPU 限制,那么您可以将软内存限制与可选的硬限制一起用作故障保护。如果您受内存限制,那么您将只需要使用硬限制而不使用软限制。

【讨论】:

我不同意内存绑定任务不需要软限制。合理的软限制有助于 ECS 首先不放置在内存不足的实例上。 @iGEL 任务放置同时考虑硬限制和软限制

以上是关于AWS ECS 任务内存硬限制和软限制的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 AWS CLI 运行 ECS 任务时出现资源:内存错误

AWS ECS TaskDefinition 自动扩展

AWS ECS:ENV 变量超出任务定义 JSON

将 aws 资源限制为特定的 ecs 集群

操作系统学习笔记:实时系统

如何从 AWS Lambda 函数运行 ECS 任务?