本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
容器实例内存管理
当 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 操作)查看容器实例注册的内存量。如果要尝试为任务提供尽可能多的某个具体实例类型的内存,以最大程度地提高资源使用率,则可以观察可用于该容器实例的内存,然后为任务分配该内存量。
查看容器实例内存
-
在 https://console.amazonaws.cn/ecs/
上打开 Amazon ECS 控制台。 -
选择托管您的容器实例的集群来查看。
-
选择 ECS Instances (ECS 实例),然后从 Container Instance (容器实例) 列中选择要查看的容器实例。
-
Resources (资源) 部分显示容器实例的已注册内存和可用内存。
Registered (已注册) 内存值是容器实例在首次启动时注册到 Amazon ECS 的内存量;而 Available (可用) 内存值是尚未分配给任务的内存量。