我很难理解ECS任务定义中的memoryReservation
。
为容器保留的内存软限制(以MiB为单位)。什么时候 系统内存处于争用状态,Docker尝试保留 容器内存达到此软限制;但是,您的容器可以 需要时消耗更多的内存,最多达到指定的硬限制 使用内存参数(如果适用)或所有可用参数 容器实例上的内存,以先到者为准。
那么设置该值会有什么后果?
我的uwsgi由于内存而被杀死,我想知道更改此值是否有帮助。
答案 0 :(得分:0)
这意味着,如果未在任务定义内指定memory
参数,则memoryReservation
将用于从容器实例中减去内存,并将分配给运行任务。但是,如果您指定了memory
参数,那么它将用于从容器实例中减去那么多的内存。如果同时设置两个参数,则需要指定memory
和memoryReservation
参数,以使memory
> memoryReservation
。正如您必须从文档中了解到的那样,memory
=> hard limit
和memoryReservation
=> soft limit
。 soft 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内存 实例,但也允许容器占用更多内存 资源。