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

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

计算资源内存管理

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

假设您为任务指定了 8192 MiB,但您的所有计算资源都没有 8192 MiB 或更大的可用内存来满足此要求。这样,就无法将任务放到您的计算环境中。如果使用托管计算环境,则Amazon Batch必须启动更大的实例类型来满足该要求。

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

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

例 - 确定 Linux 总内存

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

$ free -b

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

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 控制台或 DescribeContainerInstancesAPI 操作中查看计算资源注册的内存量。如果您试图通过为作业提供特定实例类型的作业提供尽可能多的内存来最大限度地提高资源利用率,则可以观察计算资源的可用内存,然后为您的作业分配足够的内存。

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

  2. 选择托管计算资源的集群以供查看。计算环境的集群名称以该计算环境名称开头。

  3. 选择 ECS 实例,然后从 “容器实例” 列中选择要查看的计算资源。

  4. 资源部分显示了计算资源的已注册内存和可用内存。

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