

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 對 Amazon ECS 任務定義無效的 CPU 或記憶體錯誤進行疑難排解
<a name="task-cpu-memory-error"></a>

使用 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` 參數 (即使也指定了 `EC2`) 指定 `FARGATE` 的任務定義，您必須使用下表的其中一個值。這些值決定了 CPU 與記憶體參數的支援值範圍。

對於在 Fargate 上託管的任務，下表顯示了有效的 CPU 和記憶體組合。JSON 檔案中的記憶體值是以 MiB 為單位。您可以將 GB 值乘以 1024，將 GB值 轉換為 MiB。例如 1 GB = 1024 MiB。


|  CPU 數值  |  記憶體數值  |  AWS Fargate 支援的作業系統  | 
| --- | --- | --- | 
|  256 (.25 vCPU)  |  512 MiB、1 GB、2 GB  |  Linux  | 
|  512 (.5 vCPU)  |  1 GB、2 GB、3 GB、4 GB  |  Linux  | 
|  1024 (1 vCPU)  |  2 GB、3 GB、4 GB、5 GB、6 GB、7 GB、8 GB  |  Linux、Windows  | 
|  2048 (2 vCPU)  |  介於 4 GB 與 16 GB 之間，以 1 GB 為單位遞增  |  Linux、Windows  | 
|  4096 (4 vCPU)  |  介於 8 GB 與 30 GB 之間，以 1 GB 為單位遞增  |  Linux、Windows  | 
|  8192 (8 vCPU)  此選項需要 Linux 平台 `1.4.0` 或更新版本。   |  介於 16 GB 與 60 GB 之間，以 4 GB 為單位遞增  |  Linux  | 
|  16384 (16vCPU)  此選項需要 Linux 平台 `1.4.0` 或更新版本。   |  介於 32 GB 與 120 GB 之間，以 8 GB 為單位遞增  |  Linux  | 

對於 Amazon EC2 上託管的任務，支援的任務 CPU 值介於 0.25 vCPUs和 192 vCPUs之間。

EC2 與 Fargate 之間的 CPU 控制機制不同：
+ 對於 Amazon EC2 上託管的任務：Amazon ECS 透過 CPU 期間與 CPU 配額來控制任務大小的 CPU 硬性限制。當您在任務定義中指定 vCPU 時，Amazon ECS 會將值轉換為適用於 `cgroup` 的 CPU 期間與 CPU 配額設定。
+ 對於在 Fargate 上託管的任務：Amazon ECS 會透過 CPU 共用機制來控制 CPU 配置。在 Fargate 任務中，CPU 配額與期間值不會用於 CPU 限制。

對於 Amazon EC2 任務，CPU 配額會控制在特定 CPU 期間授予 `cgroup` 的 CPU 時間量。這兩個設定都以微秒表示。當 CPU 配額等於 CPU 期間時，表示 `cgroup` 最多可在一個 vCPU 上達到 100% 執行率 (若為多個 vCPU，則按相應比例總和達 100%)。CPU 配額上限為 1000000us，CPU 期間下限為 1ms。您可以使用這些值來設定 CPU 計數的限制。在不變更 CPU 配額的情況下變更 CPU 期間時，實際生效的限制會與您在任務定義中指定的值不同。

100 毫秒期間允許 0.125 至 10 範圍的 vCPU。

**注意**  
Windows 容器會忽略任務層級的 CPU 和記憶體參數。