管理容器交换空间
使用 Amazon ECS,您可以在容器级别控制基于 Linux 的 Amazon EC2 实例上的交换内存空间使用量。使用每个容器的交换配置,任务定义中的每个容器都可以启用或禁用交换。对于启用此功能的用户,可以对所用的最大交换空间量进行限制。例如,延迟关键型容器可以禁用交换。相比之下,具有高暂时内存需求的容器可以打开交换,以减少容器负载时出现内存不足错误的机率。
容器的交换配置由以下容器定义参数管理。
maxSwap
-
容器可以使用的交换内存总量(以 MiB 为单位)。该参数会转换为 docker run
的 --memory-swap
选项,其中,该值为容器内存和maxSwap
值之和。如果指定
maxSwap
值为0
,则该容器不使用交换。接受的值为0
或任何正整数。如果省略maxSwap
参数,该容器将为其运行所在的容器实例使用交换配置。必须为要使用的swappiness
参数设置maxSwap
值。 swappiness
-
您可以使用此功能调整容器的内存 swappiness 行为。
swappiness
值为0
不会导致交换,除非有需要。swappiness
值为100
将导致页面被积极地交换。接受的值为0
到100
之间的整数。如果未指定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 容器。
-
如果任务定义中忽略了
maxSwap
和swappiness
任务定义参数,每个容器都有默认的swappiness
值60
。此外,总的交换使用量限制为容器的内存预留量的两倍。