

# 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` 状态后退出并返回非零代码