amazon-web-services - 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 需要将您的作业容器放在实际支持上限/限制的主机上,因为没有办法先验地告诉您的容器将使用多少实际内存.
或者换一种说法:如果有“最低”要求,并且您指定了 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
,那么主机将没有任何内存(没有交换)。
推荐阅读
- c# - 'EmployeeDBEntities' 可以在 C# 类库项目的应用程序配置文件中找到
- google-apps-script - 如何从谷歌表格下载PNG图表
- arrays - NODEJS:想要创建一个对象数组,每个对象中只有一个键的值设置为空
- java - 尝试初始化 posModel 时,Android 中的 OpenNLP 获取 FileNotFoundException
- python - 使用索引的 KeyError
- android - 将 Android Studio 文件传输到另一台 PC
- reactjs - React 功能组件中的依赖 api 调用
- typescript - 使用多态 this 在打字稿中实现类型安全克隆而不使用类型转换
- javascript - 如何在不使用事件监听器的情况下检查单击的元素?
- sublimetext - 如何在 Sublime 上启用着色文本