管理容器交换空间 - Amazon Elastic Container Service

管理容器交换空间

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

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

maxSwap

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

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

swappiness

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

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

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

容器交换注意事项

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

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

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

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

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