管理 Amazon ECS 上的容器交换内存空间 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Amazon ECS,您可以在容器级别控制基于 Linux 的 Amazon EC2 实例上的交换内存空间使用量。使用每个容器的交换配置,任务定义中的每个容器都可以启用或禁用交换。对于启用此功能的用户,可以对所用的最大交换空间量进行限制。例如,延迟关键型容器可以禁用交换。相比之下,具有高暂时内存需求的容器可以打开交换,以减少容器负载时出现内存不足错误的机率。

容器的交换配置由以下容器定义参数管理。

maxSwap

容器可以使用的交换内存总量(以 MiB 为单位)。该参数会转换为 Docker 运行--memory-swap选项,其中,该值为容器内存和maxSwap值之和。

如果指定maxSwap值为0,则该容器不使用交换。接受的值为0或任何正整数。如果省略 maxSwap 参数,该容器将为其运行所在的容器实例使用交换配置。必须为要使用的swappiness参数设置maxSwap值。

swappiness

您可以使用此功能调整容器的内存 swappiness 行为。swappiness 值为 0 不会导致交换,除非有需要。swappiness 值为 100 将导致页面被积极地交换。接受的值为0100之间的整数。如果未指定swappiness参数,则使用默认值60。如果未指定 maxSwap 的值,则此参数将被忽略。此参数会将--memory-swappiness选项映射到 Docker 运行

在以下示例中,提供了 JSON 语法。

"containerDefinitions": [{ ... "linuxParameters": { "maxSwap": integer, "swappiness": integer }, ... }]

注意事项

在使用每个容器交换配置时,请考虑以下事项。

  • 必须在托管任务的 Amazon EC2 实例上启用和分配交换空间,以供容器使用。预设情况下,经 Amazon ECS 优化的 AMI 没有启用交换功能。必须在实例上启用交换才能使用此功能。有关更多信息,请参阅《Amazon EC2 用户指南》的中的实例存储交换卷如何使用交换文件分配内存以便在 Amazon EC2 实例中用作交换空间?

  • 仅指定 EC2 启动类型的任务定义支持交换空间容器定义参数。仅供 Fargate 上的 Amazon ECS 使用的任务定义不支持这些参数。

  • 仅 Linux 容器支持此功能。目前不支持 Windows 容器。

  • 如果任务定义中忽略了 maxSwapswappiness 任务定义参数,每个容器都有默认的 swappiness60。此外,总交换使用量限制为容器内存的两倍。

  • 如果您在 Amazon Linux 2023 上使用任务,则不支持 swappiness 参数。