Amazon web services 由于内存要求==内存限制,AWS批处理作业被终止?

Amazon web services 由于内存要求==内存限制,AWS批处理作业被终止?,amazon-web-services,amazon-ecs,aws-batch,Amazon Web Services,Amazon Ecs,Aws Batch,在AWS批处理中,当我指定内存需求(例如3200MB)时,我的作业最终被终止,因为(a)实际实例autoselected具有64GB内存,(b)ECS似乎将3200MB视为一个需求和一个硬限制(“如果您的容器试图超过此处指定的内存,则容器将从中终止”)。所以,只要我的工作略高于32GB,它就会被杀死,尽管我很高兴它能使用64GB 如何正确地指定最低内存要求,而不会导致AWS批处理终止略高于该要求的作业?我觉得很奇怪,“内存”参数似乎既是最小值又是最大值 我想我误解了什么。resourceRequ

在AWS批处理中,当我指定内存需求(例如3200MB)时,我的作业最终被终止,因为(a)实际实例autoselected具有64GB内存,(b)ECS似乎将3200MB视为一个需求和一个硬限制(“如果您的容器试图超过此处指定的内存,则容器将从中终止”)。所以,只要我的工作略高于32GB,它就会被杀死,尽管我很高兴它能使用64GB

如何正确地指定最低内存要求,而不会导致AWS批处理终止略高于该要求的作业?我觉得很奇怪,“内存”参数似乎既是最小值又是最大值


我想我误解了什么。

resourceRequirements属性中的内存需求始终是最大值/上限。您可以在那里指定作业容器将要使用的最大内存量

引自:

要呈现给容器的内存的硬限制(在MiB中)。如果容器试图超过此处指定的内存,则容器将被终止

下限/最小值没有多大意义,因为AWS需要将作业容器放在实际支持上限/限制的主机上,因为无法预先确定容器将使用多少实际内存

或者换一种方式:如果存在“最低”要求,并且您指定了最小值=
1 MiB
和最大值=
16 GiB
,那么AWS批处理应该如何处理这些信息?它无法将作业容器放到内存为512 MiB的主机上,因为作业容器在运行时可能会超过该内存,因为您说过最大内存为16 GiB(在本例中)。一旦达到当前主机的内存,AWS批处理不会冻结正在运行的作业并将其迁移到另一台主机上


AWS Batch决定将您的具体作业容器放在具有
64 GiB
的实例上这一事实可能是巧合,因为
32 GiB
只是实例内存大小的边界
32 GiB 64 GiB
。如果您的任务是使用完整的
32gib
,那么主机就没有内存了(不交换)。

谢谢!我有一个工作,需要至少32GB的内存。当我指定16核和32GB时,我会得到一个具有16核和64GB的实例,因为不存在具有16核+32GB AFAIK的实例。此时,我的作业看到它在64GB的机器上运行,并试图充分利用它,但当它超过32GB时,ECS会杀死它。然而,当我将内存需求增加到64GB时,我最终得到了一个128GB的实例,因为它位于边界上。因此,我对在不升级到128GB的情况下充分利用64GB实例内存的最佳方法感到困惑。您没有说您指定了
16
内核作为要求。在这种情况下,是的,
64gib
是次佳选择。但同样:
32gib
不是最小值。这是最大值。最小值可能是
0.5 MiB
就在容器启动的毫秒。但这与此无关。因此,我对在不升级到128GB的情况下充分利用64GB实例内存的最佳方法感到困惑。-只是不要指定两个内存需求的能力。您可以指定例如
40gib
,然后您可能会在
64gib
实例/主机上进行分配。这就是我仍然感到困惑的地方。如果我指定
40gib
并分配了一个
64gib
实例,并且我的作业使用了它可用的所有内存,那么当它超过
40gib
时,它可能会被杀死。我想使用实例上所有可用的内存;如何在不升级到下一个的情况下做到这一点?我想使用实例上所有可用的内存—这根本不可能,因为主机本身也需要一些内存。