【问题标题】:AWS Batch jobs killed due because memory requirement == memory limit?AWS Batch 作业因内存需求 == 内存限制而被终止?
【发布时间】:2021-02-25 04:25:43
【问题描述】:

在 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-services amazon-ecs aws-batch


    【解决方案1】:

    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,那么主机将没有任何内存(没有交换)。

    【讨论】:

    • 谢谢你!我有一份至少需要 32GB 内存的工作。当我指定 16 核和 32GB 时,我得到一个具有 16 核和 64GB 的实例,因为不存在 16 核 + 32GB AFAIK。那时,我的工作看到它在 64GB 的机器上运行并试图充分利用它,但是当它超过 32GB 时,ECS 会杀死它。但是,当我将内存需求增加到 64GB 时,我最终得到了一个 128GB 的​​实例,因为它在边界上。所以我对在不升级到 128GB 的​​情况下充分利用 64GB 实例的内存的最佳方式感到困惑。
    • 这就是我仍然感到困惑的地方。如果我指定40 GiB 并分配了一个64 GiB 实例,并且我的工作使用了所有可用的内存,那么它可能会在它超过40 GiB 时被杀死。我想使用实例上所有可用的内存;如果不升级到下一个,我怎么能做到这一点?
    猜你喜欢
    • 2017-09-04
    • 2013-12-08
    • 2022-01-01
    • 2022-09-22
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2012-01-16
    相关资源
    最近更新 更多