ECS,任务定义中的memoryReservation的含义

时间:2019-11-27 07:10:41

标签: amazon-ecs

我很难理解ECS任务定义中的memoryReservation

  

为容器保留的内存软限制(以MiB为单位)。什么时候   系统内存处于争用状态,Docker尝试保留   容器内存达到此软限制;但是,您的容器可以   需要时消耗更多的内存,最多达到指定的硬限制   使用内存参数(如果适用)或所有可用参数   容器实例上的内存,以先到者为准。

那么设置该值会有什么后果?

我的uwsgi由于内存而被杀死,我想知道更改此值是否有帮助。

2 个答案:

答案 0 :(得分:0)

这意味着,如果未在任务定义内指定memory参数,则memoryReservation将用于从容器实例中减去内存,并将分配给运行任务。但是,如果您指定了memory参数,那么它将用于从容器实例中减去那么多的内存。如果同时设置两个参数,则需要指定memorymemoryReservation参数,以使memory> memoryReservation。正如您必须从文档中了解到的那样,memory => hard limitmemoryReservation => soft limitsoft limit就像保留,hard limit就像边界。当您的容器处于高负荷或争用状态,并且需要更多soft limit的内存时,它最多可以消耗hard limit的内存,之后您可能会看到容器被杀死。

您可以尝试增加这些限制,以查看一切是否稳定并且OOM不会杀死您的uwsgi。但也要注意代码内的任何内存泄漏。

答案 1 :(得分:0)

似乎您在任务定义级别或容器级别的某个位置设置了memory参数,两者都有很大的区别。

内存

要呈现给容器的内存量(以MiB为单位)。如果您的容器尝试超出此处指定的内存,则该容器将被杀死

内存保留

为容器保留的内存软限制(以MiB为单位)。当系统内存竞争激烈时,Docker尝试将容器内存保持在此软限制内。但是,您的容器可能会消耗更多的内存

因此最好的选择是仅指定MemoryReservation,这将有助于避免在达到该限制时杀死您的容器。

  

例如,如果您的容器通常使用128 MiB的内存,但是   在短时间内偶尔会突发到256 MiB的内存,   您可以将memoryReservation设置为128 MiB,将内存硬限制设置为   300 MiB。此配置将允许容器仅保留   容器上剩余资源的128 MiB内存   实例,但也允许容器占用更多内存   资源。

aws-properties-ecs-taskdefinition-containerdefinitions