本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon ECS 服務限流邏輯
Amazon ECS 服務排程器包含保護性邏輯,當任務重複啟動失敗時,會對任務啟動進行限流。這有助於防止不必要的資源消耗並降低成本。
如果服務中的任務未能從 PENDING 狀態轉換為 RUNNING 狀態,而是直接移至 STOPPED 狀態,排程器會:
-
遞增重新啟動嘗試之間的間隔時間
-
持續增加延遲,直至兩次嘗試之間的間隔達到上限 27 分鐘
-
產生服務事件訊息以通知您問題
注意
27 分鐘的延遲期間上限可能會在未來更新中發生變更。
啟用限流後,您會收到此服務事件訊息:
(serviceservice-name) is unable to consistently start tasks successfully.
節流邏輯的重要特性:
-
服務會無限期地繼續重試嘗試
-
唯一的修改是增加了重新啟動之間的間隔時間
-
沒有使用者可設定的參數
解決限流問題
若要解決限流問題,您可以:
-
更新服務以使用新的任務定義,這會立即將服務回復到正常、非限流的運作狀態。如需詳細資訊,請參閱更新 Amazon ECS 服務。
-
解決導致任務失敗的根本原因。
觸發限流的常見任務失敗原因包括:
-
叢集資源不足 (連接埠、記憶體或 CPU)
-
由資源不足的服務事件訊息指示
-
-
容器映像提取失敗
-
可能由無效的映像名稱、標籤或許可不足造成
-
導致 檢視 Amazon ECS 已停止任務錯誤 中的
CannotPullContainerError
-
-
磁碟空間不足
-
導致已停止任務錯誤中的
CannotCreateContainerError -
如需解析步驟,請參閱在 Amazon ECS 中對 Docker API error (500): devmapper 進行疑難排解
-
重要
以下情況不會觸發限流邏輯:
-
達到
RUNNING狀態後停止的任務 -
任務因 ELB 運作狀態檢查失敗而停止
-
容器命令在達到
RUNNING狀態後以非零代碼結束的任務