排查 Amazon ECS 任务定义 CPU 或内存无效错误
使用 Amazon ECS API 或 AWS CLI 注册任务定义时,或者如果指定了无效的 cpu
或 memory
,则返回以下错误。
An error occurred (ClientException) when calling the RegisterTaskDefinition operation: Invalid 'cpu' setting for task.
注意
使用 Terraform 时,可能会返回以下错误。
Error: ClientException: No Fargate configuration exists for given values.
要解决此问题,您必须在任务定义中为任务 CPU 和内存指定受支持的值。在任务定义中,cpu
值可以用 CPU 单元数或 vCPU 数表示。注册任务定义时,其将转换为指示 CPU 单元的整数。在任务定义中,memory
值可以用 MiB 或 GB 表示。注册任务定义时,它会转换为表示 MiB 的整数。
对于为 requiresCompatibilities
参数指定的 FARGATE
任务定义(即使也指定了 EC2
),必须使用下表中的一个值。这些值决定了 CPU 和内存参数支持的值范围。
对于 Fargate 上托管的任务,下表显示了有效的 CPU 和内存组合。JSON 文件中的内存值以 MiB 为单位指定。您可以通过将 GB 值乘以 1024 来其转换为 MiB。例如 1 GB = 1024 MiB。
CPU 值 | 内存值 | AWS Fargate 支持的操作系统 |
---|---|---|
256 (.25 vCPU) | 512MiB、1GB、2GB | Linux |
512 (.5 vCPU) | 1GB、2GB、3GB、4GB | Linux |
1024 (1 vCPU) | 2GB、3GB、4GB、5GB、6GB、7GB、8GB | Linux、Windows |
2048 (2 vCPU) | 4GB 到 16GB 之间 (以 1GB 为增量) | Linux、Windows |
4096 (4 vCPU) | 8GB 到 30GB 之间 (以 1GB 为增量) | Linux、Windows |
8192 (8 vCPU) 注意此选项需要 Linux 平台 |
16 GB 到 60 GB 之间(以 4 GB 为增量) | Linux |
16384 (16vCPU) 注意此选项需要 Linux 平台 |
32 GB 到 120 GB 之间(以 8 GB 为增量) | Linux |
对于 Amazon EC2 上托管的任务,受支持的任务 CPU 值介于 0.25 个 vCPU 与 192 个 vCPU 之间。
Amazon ECS 使用 CPU 周期和 CPU 配额来控制任务大小 CPU 硬限制。当您在任务定义中指定 vCPU 时,Amazon ECS 会将该值转换为适用于 cgroup
的 CPU 周期和 CPU 配额设置。
CPU 配额控制在给定 CPU 周期内授予 cgroup
的 CPU 时间。这两个设置均以微秒为单位表示。当 CPU 配额等于 CPU 周期时,意味着 cgroup
可以在一个 vCPU 上执行高达 100%(或在多个 vCPU 上执行任意比例,总计为 100%)。CPU 配额的最大值为 1000000us,CPU 周期最小为 1 ms。您可以使用这些值来设置 CPU 数量的限制。当您在不更改 CPU 配额的情况下更改 CPU 周期时,您的有效限制与您在任务定义中指定的限制不同。
100 ms 周期允许 vCPU 的范围为 0.125 到 10。
注意
Windows 容器将忽略任务级 CPU 和内存参数。