计算资源内存管理 - Amazon Batch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

计算资源内存管理

当 Amazon ECS 容器代理将计算资源注册到计算环境中时,代理必须确定计算资源可为作业保留的内存量。由于平台内存开销和系统内核占用的内存,此数量不同于 Amazon EC2 实例的已安装内存量。例如,m4.large 实例具有 8GiB 的已安装内存。但是,当计算资源注册时,这不总是表示确实有 8192 MiB 内存可用于作业。

假设您为作业指定了 8192 MiB,并且您的计算资源中没有一个有 8192 MiB 或更大的可用内存来满足此要求。则作业就无法放置在您的计算环境中。如果使用托管计算环境,则 Amazon Batch 必须启动更大的实例类型来满足该要求。

原定设置的 Amazon Batch 计算资源 AMI 还会为 Amazon ECS 容器代理以及其他关键系统进程预留 32 MiB 内存。此内存不能用于作业分配。有关更多信息,请参阅预留系统内存

Amazon ECS 容器代理使用 Docker ReadMemInfo() 函数来查询可用于操作系统的总内存。Linux 提供了用来确定总内存的命令行实用程序。

例 - 确定 Linux 总内存

free 命令可返回操作系统识别的总内存。

$ free -b

以下是运行经 Amazon ECS 优化的 Amazon Linux AMI 的 m4.large 实例的示例输出。

total used free shared buffers cached Mem: 8373026816 348180480 8024846336 90112 25534464 205418496 -/+ buffers/cache: 117227520 8255799296

此实例的总内存为 8373026816 字节。这意味着有 7985 MiB 可用于执行任务。

预留系统内存

如果您的作业占用计算资源上的所有内存,则您的作业可能会与关键系统进程争夺内存,并可能引起系统故障。Amazon ECS 容器代理提供一个名为 ECS_RESERVED_MEMORY 的配置变量。您可以使用该配置变量从分配给您的作业的池中移除指定 MiB 数的内存。这可以有效地为关键系统进程预留该内存。

原定设置的 Amazon Batch 计算资源 AMI 还会为 Amazon ECS 容器代理以及其他关键系统进程预留 32 MiB 内存。

查看计算资源内存

您可以在 Amazon ECS 控制台中或使用 DescribeContainerInstances API 操作查看计算资源注册的内存量。如果要尝试为作业提供尽可能多的某个具体实例类型的内存,以最大程度地提高资源使用率,则可以观察可用于该计算资源的内存,然后为作业分配该内存量。

查看计算资源内存
  1. https://console.aws.amazon.com/ecs/v2 打开控制台。

  2. 选择 Clusters(集群),并选择托管您的计算资源的集群。

    计算环境的集群名称以该计算环境名称开头。

  3. 选择基础架构

  4. 容器实例下,选择容器实例。

  5. 资源和网络连接部分 显示了计算资源的已注册内存和可用内存。

    已注册 内存值是计算资源首次启动时向 Amazon ECS 注册的值,可用 内存值是尚未分配给作业的值。