跳至内容

如何在 Amazon ECS 中为任务分配内存?

2 分钟阅读
0

我想使用 Amazon Elastic Container Service (Amazon ECS) 为任务分配内存。

简短描述

在 Amazon ECS 中,您可以在以下 2 种任务定义中定义任务的内存:

Amazon ECS 会根据您使用的是 memoryReservation 参数还是 memory 参数来计算服务内存利用率指标。有关详细信息,请参阅服务级别的 CPU 和内存利用率

在以下表中,您可以查看为 Amazon Elastic Compute Cloud (Amazon EC2) 和 AWS Fargate 启动类型配置的最低选项:

未定义任务大小的任务已定义任务大小的任务
任务 CPU可选配置强制配置
任务内存可选配置强制配置
容器 CPU可选配置可选配置
容器内存强制配置可选配置
启动类型兼容性仅 EC2EC2 和 Fargate

对于未定义任务大小的任务,必须为任务配置容器内存。您只能将这些任务用于 Amazon EC2 启动类型。对于已定义任务大小的任务,您可以将这些任务用于 Amazon EC2 或 AWS Fargate 启动类型。然后,配置任务内存和 CPU。有关详细信息,请参阅 Fargate 启动类型的 Amazon ECS 任务定义参数

解决方法

查看您的容器内存分配

完成以下步骤:

  1. 打开 Amazon ECS 控制台
  2. 在导航窗格中,选择 Clusters(集群),然后选择您的集群。
  3. 在集群详细信息页面上,选择 Infrastructure(基础架构)。
  4. Container instances(容器实例)下,选择已注册到您的集群的容器实例 ID。
  5. Resources and networking(资源和联网)下,查看 Memory(内存)详细信息。

memory 参数提供有关集群的以下详细信息:

  • 调用 RegisterContainerInstance API 时可用的内存总容量
  • 分配给实例上运行的 ECS 任务的已使用内存
  • 可分配给新任务的可用内存

**注意:**要获取实例资源使用情况的统计数据,请使用 SSH 或 SSM 连接到该实例。然后,运行 docker stats 命令。有关详细信息,请参阅 Docker 网站上的 docker container stats(Docker 容器统计数据)

对于 EC2 启动类型,您必须了解容器实例上的可用内存,以便在任务定义中正确指定内存。如果任务定义中指定的内存大于已注册实例上的可用内存,则任务将失败。

使用 Amazon ECS 控制台 JSON 编辑器

要创建 Amazon ECS 任务定义并为任务分配内存,您可以使用 Amazon ECS 控制台 JSON 编辑器。有关详细信息,请参阅过程

使用 Amazon ECS 控制台

要使用 Amazon ECS 控制台为任务分配内存,请完成以下任务之一。

创建具有软限制 (memoryReservation) 的任务定义

完成以下步骤:

  1. 打开 Amazon ECS 控制台
  2. 在导航窗格中,选择 Task Definition(任务定义),然后选择 Create new task definition(创建新任务定义)。
  3. Create task definition(创建任务定义)屏幕上,输入以下信息:
    对于 Task definition family name(任务定义系列名称),输入任务的名称。
    对于 Launch type(启动类型),选择 Amazon EC2 instances(Amazon EC2 实例)。
    Container(容器)部分下,对于 Container details(容器详细信息),输入容器的名称和映像 URI。
    对于 Resource allocation limits(资源分配限制),输入 Memory soft limit(内存软限制)的值。然后,选择 Create(创建)。
    **注意:**内存软限制将映射到 memoryReservation 参数。

创建具有硬限制 (memory) 的任务定义

完成以下步骤:

  1. 打开 Amazon ECS 控制台
  2. 在导航窗格中,选择 Task Definition(任务定义),然后选择 Create new task definition(创建新任务定义)。
  3. Create task definition(创建任务定义)屏幕上,输入以下信息:
    对于 Task definition family name(任务定义系列名称),输入任务的名称。
    对于 Launch type(启动类型),选择 Amazon EC2 instances(Amazon EC2 实例)。
    Container(容器)部分下,对于 Container details(容器详细信息),输入容器的名称和映像 URI。
    对于 Resource allocation limits(资源分配限制),输入 Memory hard limit(内存硬限制)的值。然后,选择 Create(创建)。
    **注意:**内存硬限制将映射到 memory 参数。

查看容器的内存分配

完成以下步骤:

  1. 打开 Amazon ECS 控制台
  2. 在导航窗格中,选择 Clusters(集群),然后选择您的集群。
  3. Cluster details(集群详细信息)页面上,选择 Infrastructure(基础架构)选项卡。
  4. 选择已注册到集群的容器实例。
  5. Container instance(容器实例)选项卡的 Resources(资源)下,查看 Memory registered(已注册内存)值。
    **注意:**当正在运行的任务数为 0 时,Memory registered(已注册内存)值将等于 Memory available(可用内存)值。

**注意:**要获取实例资源使用情况的统计数据,请使用 SSH 或 SSM 连接到该实例。然后,运行 docker stats 命令。有关详细信息,请参阅 Docker 网站上的 docker container stats(Docker 容器统计数据)

对于作为服务的一部分运行的任务,Service memory utilization(服务内存利用率)指标会以占总内存资源的百分比形式报告使用情况。这些资源是在任务定义中为服务指定的。有关详细信息,请参阅服务级别的 CPU 和内存利用率

您还可以对集群使用 Container Insights 来查看 MemoryUtilized 指标。该指标显示任务和容器当前使用的内存。

相关信息

How Amazon ECS manages CPU and memory resources(Amazon ECS 如何管理 CPU 和内存资源)

管理 Amazon ECS 上的容器交换内存空间

为 Amazon EC2 启动类型创建 Amazon ECS 集群

预留 Amazon ECS Linux 容器实例内存

Docker 网站上的 Resource Constraints(资源限制)

AWS 官方已更新 6 个月前