首页 > 解决方案 > 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 杀死略高于该要求的作业?对我来说,“内存”参数似乎是最小值和最大值似乎很奇怪。

我想我误解了什么。

标签: amazon-web-servicesamazon-ecsaws-batch

解决方案


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

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

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

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

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

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


推荐阅读