AWS Fargate 及其内存管理
AWS Fargate and its memory management
从 AWS 文档我可以看到 CPU
和 Memory
属性在资源的 AWS::ECS::TaskDefinition for Fargate but not in the ContainerDefinition 中是必需的 if 使用 Fargate。
这究竟是如何工作的?如果我没有在 ContainerDefinition
中指定它,它会使用任务可用的资源吗?如果任务中只有一个容器……定义这些值是否有意义?如果需要它们,对我来说似乎是多余和冗长的。
注册任务定义时,您可以指定总 cpu 和任务使用的内存。这与容器定义级别的 cpu 和内存值是分开的。
如果使用 Fargate 启动类型,则这些任务定义字段是必需的,并且支持 cpu 和内存的特定值。这将是 CPU/Memory 呈现给任务的硬性限制。例如,如果您的任务配置为使用 1 个 vCPU 和 2 GB 内存,那么此时内存限制为 2 GB。如果任务内存使用率在任何时候超过 2 GB,任务将终止并出现 OutOfMemory 错误。
您还可以在容器级别指定 cpu 和内存资源。这将是呈现给容器的资源量(一个任务可以有多个容器)。如果您的容器试图超过此处指定的资源,则容器将被终止。这些字段对于使用 Fargate 启动类型的任务是可选的,唯一的要求是任务中为所有容器保留的 cpu 和内存总量低于任务级别 cpu 和内存值,如果指定了一个。
在容器级别,Docker 守护程序为容器保留至少 4 MiB 的内存,因此您不应为容器指定少于 4 MiB 的内存。
当容器在 TaskDefinition
中没有指定限制时,容器将使用任务的所有可用资源,这对于 Fargate
任务是必需的。
这意味着如果TaskDefinition
中只有一个容器,则无需定义它们。尽管它们是多余的(如果等于任务本身的那些)甚至是有害的(如果它们低于给任务的数量),则可以指定它们。
如果多个容器属于同一任务,Fargate
将在所有容器之间平均分配资源。这可能是(也可能不是)想要的 behavior.A
从 AWS 文档我可以看到 CPU
和 Memory
属性在资源的 AWS::ECS::TaskDefinition for Fargate but not in the ContainerDefinition 中是必需的 if 使用 Fargate。
这究竟是如何工作的?如果我没有在 ContainerDefinition
中指定它,它会使用任务可用的资源吗?如果任务中只有一个容器……定义这些值是否有意义?如果需要它们,对我来说似乎是多余和冗长的。
注册任务定义时,您可以指定总 cpu 和任务使用的内存。这与容器定义级别的 cpu 和内存值是分开的。
如果使用 Fargate 启动类型,则这些任务定义字段是必需的,并且支持 cpu 和内存的特定值。这将是 CPU/Memory 呈现给任务的硬性限制。例如,如果您的任务配置为使用 1 个 vCPU 和 2 GB 内存,那么此时内存限制为 2 GB。如果任务内存使用率在任何时候超过 2 GB,任务将终止并出现 OutOfMemory 错误。
您还可以在容器级别指定 cpu 和内存资源。这将是呈现给容器的资源量(一个任务可以有多个容器)。如果您的容器试图超过此处指定的资源,则容器将被终止。这些字段对于使用 Fargate 启动类型的任务是可选的,唯一的要求是任务中为所有容器保留的 cpu 和内存总量低于任务级别 cpu 和内存值,如果指定了一个。
在容器级别,Docker 守护程序为容器保留至少 4 MiB 的内存,因此您不应为容器指定少于 4 MiB 的内存。
当容器在 TaskDefinition
中没有指定限制时,容器将使用任务的所有可用资源,这对于 Fargate
任务是必需的。
这意味着如果TaskDefinition
中只有一个容器,则无需定义它们。尽管它们是多余的(如果等于任务本身的那些)甚至是有害的(如果它们低于给任务的数量),则可以指定它们。
如果多个容器属于同一任务,Fargate
将在所有容器之间平均分配资源。这可能是(也可能不是)想要的 behavior.A