

# 优化 Amazon ECS 任务启动时间
<a name="task-recommendations"></a>

 要加快任务启动速度，请考虑以下建议。
+ 

**缓存容器映像和装填实例**  
<a name="recommend-cache-images"></a> 如果您使用 EC2，则可以将 Amazon ECS 容器代理的拉取行为配置为 `ECS_IMAGE_PULL_BEHAVIOR`：`prefer-cached`。在没有缓存映像时远程拉取映像。否则，将使用实例上缓存的映像。为容器关闭自动映像清除，以确保不会删除缓存的映像。这样可以缩短后续启动的映像拉取时间。当容器实例中的任务密度很高时，缓存的效果会更大，您可以使用 `binpack` 放置策略对其进行配置。缓存容器映像对于基于 Windows 的工作负载特别有益，这些工作负载通常有很大（数十 GB）的容器映像大小。使用 `binpack` 放置策略时，您还可以考虑使用弹性网络接口（ENI）中继在每个容器实例上使用 `awsvpc` 网络模式放置更多任务。ENI 中继增加了您可以在 `awsvpc` 模式下运行的任务数量。例如，可能仅支持同时运行 2 个任务的 c5.large 实例通过 ENI 中继最多可运行 10 个任务。
+ 

**选择最佳网络模式**  
<a name="recommend-network-mode"></a>尽管在许多情况下，`awsvpc` 网络模式是理想的，但这种网络模式本质上会增加任务启动延迟，因为对于 `awsvpc` 模式下的每个任务，Amazon ECS 工作流都需要通过调用 Amazon EC2 API 来预预调配和附加 ENI，这会给您的任务启动增加几秒钟的开销。相比之下，使用 `awsvpc` 网络模式的主要优势是每个任务都有一个允许或拒绝流量的安全组。这意味着，您可以更灵活地在更精细的级别上控制任务与服务之间的通信。如果您优先考虑部署速度，则可以考虑使用 `bridge` 模式来加快任务启动速度。有关更多信息，请参阅 [为 Amazon ECS 任务分配网络接口](task-networking-awsvpc.md)。
+ 

**跟踪您的任务启动生命周期，以寻找优化机会**  
<a name="recommend-track-starttime"></a>通常很难知道应用程序启动所需的时间量。在应用程序启动期间启动容器映像、运行启动脚本和其他配置可能需要大量时间。您可以使用任务元数据端点发布指标来跟踪应用程序启动时间（从容器元数据响应中的 `StartedAt` 到任务或服务的 `StartedAt` 时间）。利用这些数据，您可以了解您的应用程序对总启动时间的贡献度，并找到可以减少不必要的应用程序特定开销和优化容器映像的领域。有关更多信息，请参阅 [Amazon ECS 自动扩缩和容量管理最佳实践](capacity-availability.md)。
+ 

**选择最佳实例类型（对于 EC2）**  
<a name="recommend-instance-type"></a>选择正确的实例类型基于您在任务中配置的资源预留（例如 CPU、内存）。因此，在调整实例大小时，您可以计算在单个实例上可以放置多少任务。放置良好的任务的一个简单例子是，在 m5.large 实例（支持 2 vCPU 和 8GB 内存）中托管 4 个任务，需要 0.5 vCPU 和 2GB 内存预留。此任务定义的预留充分利用了实例的资源。