问题描述
在 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
,那么主机将没有任何内存可用(无需交换)。