

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

# Amazon ECS 服務限流邏輯
<a name="service-throttle-logic"></a>

Amazon ECS 服務排程器包含保護性邏輯，當任務重複啟動失敗時，會對任務啟動進行限流。這有助於防止不必要的資源消耗並降低成本。

如果服務中的任務未能從 `PENDING` 狀態轉換為 `RUNNING` 狀態，而是直接移至 `STOPPED` 狀態，排程器會：
+ 遞增重新啟動嘗試之間的間隔時間
+ 持續增加延遲，直至兩次嘗試之間的間隔達到上限 27 分鐘
+ 產生服務事件訊息以通知您問題

**注意**  
27 分鐘的延遲期間上限可能會在未來更新中發生變更。

啟用限流後，您會收到此服務事件訊息：

```
(service {{service-name}}) is unable to consistently start tasks successfully.
```

節流邏輯的重要特性：
+ 服務會無限期地繼續重試嘗試
+ 唯一的修改是增加了重新啟動之間的間隔時間
+ 沒有使用者可設定的參數

## 解決限流問題
<a name="resolving-throttling"></a>

若要解決限流問題，您可以：
+ 更新服務以使用新的任務定義，這會立即將服務回復到正常、非限流的運作狀態。如需詳細資訊，請參閱[更新 Amazon ECS 服務](update-service-console-v2.md)。
+ 解決導致任務失敗的根本原因。

觸發限流的常見任務失敗原因包括：
+ 叢集資源不足 (連接埠、記憶體或 CPU)
  + 由[資源不足的服務事件訊息](service-event-messages-list.md#service-event-messages-1)指示
+ 容器映像提取失敗
  + 可能由無效的映像名稱、標籤或許可不足造成
  + 導致 [檢視 Amazon ECS 已停止任務錯誤](stopped-task-errors.md) 中的 `CannotPullContainerError`
+ 磁碟空間不足
  + 導致[已停止任務錯誤](stopped-task-errors.md)中的 `CannotCreateContainerError`
  + 如需解析步驟，請參閱[在 Amazon ECS 中對 Docker `API error (500): devmapper` 進行疑難排解](CannotCreateContainerError.md)

**重要**  
以下情況不會觸發限流邏輯：  
達到 `RUNNING` 狀態後停止的任務
因 Elastic Load Balancing 運作狀態檢查失敗而停止的任務
容器命令在達到 `RUNNING` 狀態後以非零代碼結束的任務