容器实例内存管理 - Amazon Elastic Container Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

容器实例内存管理

当 Amazon ECS 容器代理将容器实例注册到集群时,该代理必须确定容器实例可为任务保留多少内存。由于平台内存开销和系统内核占用的内存,此数量不同于 Amazon EC2 实例所标示的已安装内存量。例如,m4.large 实例具有 8GiB 的已安装内存。但是,当容器实例注册时,这不总是表示确实有 8192 MiB 内存对任务可用。

如果为任务指定 8192 MiB;,而您的任何一个容器实例都没有 8192 MiB 或更高内存可用于满足此需求,则任务无法放置在您的集群中。

您还应该为 Amazon ECS 容器代理以及容器实例上的其他关键系统进程预留一些内存,这样您的任务容器不会争用相同的内存从而可能触发系统故障。 有关更多信息,请参阅预留系统内存

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

例 - 确定 Linux 总内存

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

$ free -b

运行 Amazon ECS-optimized Amazon Linux AMI 的 m4.large 实例的示例输出。

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

此实例具有 8373026816 字节的总内存,这表示有 7985MiB 内存可用于任务。

例 - 确定 Windows 总内存

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

C:\> wmic ComputerSystem get TotalPhysicalMemory

运行 Amazon ECS-optimized Windows AMI 的 m4.large 实例的示例输出。

TotalPhysicalMemory 8589524992

此实例具有 8589524992 字节的总内存,这表示有 8191MiB 内存可用于任务。

预留系统内存

如果任务占用了容器实例上的全部内存,则任务可能与关键系统进程争用内存,并且可能会触发系统故障。Amazon ECS 容器代理提供名为 ECS_RESERVED_MEMORY 的配置变量,您可以使用该变量从分配给您的任务的池中移除指定 MiB 数的内存。这可以有效地为关键系统进程预留该内存。

例如,如果您在容器代理配置文件中指定 ECS_RESERVED_MEMORY=256,则代理会为该实例注册总内存减去 256 MiB 后得到的内存量,这 256 MiB 内存无法由 ECS 任务分配。有关代理配置变量以及如何设置这些变量的更多信息,请参阅Amazon ECS 容器代理配置使用 Amazon EC2 用户数据引导启动容器实例

查看容器实例内存

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

查看容器实例内存

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 选择托管您的容器实例的集群来查看。

  3. 选择 ECS Instances (ECS 实例),然后从 Container Instance (容器实例) 列中选择要查看的容器实例

  4. Resources (资源) 部分显示容器实例的已注册内存和可用内存。

    Registered (已注册) 内存值是容器实例在首次启动时注册到 Amazon ECS 的内存量;而 Available (可用) 内存值是尚未分配给任务的内存量。