AWS Batch 作业因内存要求 == 内存限制而终止?

问题描述

在 AWS Batch 中,当我指定内存要求时,例如32000MB,我的工作最终被杀死了,因为 (a) 自动选择的实际实例有 64GB 内存和 (b) ECS 似乎将 32000MB 视为要求和硬限制(“如果您的容器试图超过此处指定的内存,容器将被杀死”来自 https://docs.aws.amazon.com/batch/latest/userguide/job_definition_parameters.html)。因此,只要我的工作略高于 32GB,它就会被杀死,尽管我很高兴它能使用 64GB。

如何正确指定最低内存要求而不导致 AWS Batch 终止略高于该要求的作业? “内存”参数似乎既是最小值又是最大值,这对我来说似乎很奇怪。

我想我误解了一些东西。

解决方法

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

引用自 https://docs.aws.amazon.com/batch/latest/userguide/job_definition_parameters.html :

呈现给容器的内存硬限制(以 MiB 为单位)。如果您的容器尝试超过此处指定的内存,则该容器将被终止。

下限/最小界限没有多大意义,因为 AWS 需要将您的作业容器放在实际支持上限/限制的主机上,因为无法先验地告诉您的容器实际有多少内存打算用。

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

AWS Batch 决定将您的具体作业容器放到具有 64 GiB 的实例上这一事实可能是巧合,因为 32 GiB 只是实例内存大小 32 GiB <-> 64 GiB 的边界。如果您的工作要使用完整的 32 GiB,那么主机将没有任何内存可用(无需交换)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...