如何对 Amazon ECS 任务的调用或请求延迟问题进行故障排除?

1 分钟阅读
0

我想对 Amazon Elastic Container Service (Amazon ECS) 应用程序对请求响应缓慢的问题进行故障排除。

简短描述

以下是 ECS 任务出现高延迟的常见原因:

  • 任务的 CPU 或内存 (RAM) 利用率较高。
  • 在应用程序内部运行的应用程序依赖关系存在问题。
  • 客户端或本地目标与 ECS 任务之间的网络距离较远。
  • 网络连接问题、超额。
  • Amazon Elastic Block Store (Amazon EBS) 卷节流。

要调查和解决这些问题,请先尝试找出发生延迟的位置,然后完成解决步骤。

解决方法

要对 ECS 任务出现高延迟进行故障排除,请完成以下步骤:

  1. 运行以下命令测量第一个字节响应并检查 DNS 解析速度是否较慢,这可能会导致延迟:

    % curl -kso /dev/null -w "\n===============
    | DNS lookup: %{time_namelookup}
    | Connect: %{time_connect}| App connect: %{time_appconnect}
    | Pre-transfer: %{time_pretransfer}
    | Start transfer: %{time_starttransfer}
    | Total: %{time_total}
    | HTTP Code: %{http_code}\n===============\n" https://LOAD_BALANCER_DNS_NAME.com
    
    Example output:
    | DNS lookup: 0.035596
    | Connect: 0.063130
    | App connect: 0.159145
    | Pre-transfer: 0.159264
    | Start transfer: 0.190203
    | Total: 0.190722
    | HTTP Code: 200

    **注意:**前面的示例输出将以 ms 为单位。最佳做法是从 VPC 内部运行初始测试,以减少不同网络路径中涉及的变量。

  2. 然后,绕过负载均衡器。使用已知运行任务的任务 IP 地址来定向前面的 curl。此过程有助于隔离导致延迟的组件。

  3. 如果存在应用程序负载均衡器,请检查 Amazon CloudWatch TargetResponseTime 指标的平均统计数据中是否存在过高的值。

    如果值很高,则说明您的任务存在问题,或者外部连接可能存在应用程序依赖关系。有关详细信息,请参阅如何对应用程序负载均衡器的 TargetResponseTime 指标增加进行故障排除?

    如果存在大量任务,请激活并查看应用程序负载均衡器的访问日志条目,以识别后端实例。

  4. 要确认应用程序负载均衡器中的问题,请查看日志条目中的 request_processing_timeresponse_processing_time 字段,了解是否存在异常长的时间段。有关详细信息,请参阅如何对弹性负载均衡中应用程序负载均衡器的高延迟问题进行故障排除?如果您直接卷曲任务 IP 地址但收到了缓慢的响应,请查看 CloudWatch Container Insights

  5. 如果 CPU 和内存利用率平均低于 90% 且没有峰值,请检查应用程序任务上是否存在可能导致延迟的依赖关系。依赖关系包括对外部资源的调用,例如 Amazon Simple Storage Service (Amazon S3) 存储桶、Amazon Relational Database Service (Amazon RDS) 数据库或其他远程 Web 服务。

  6. 如果外部调用是应用程序预期工作流的一部分,请与应用程序的开发人员确认它是否在对外部依赖关系进行同步调用。或者,锁定应用程序,直到它收到对这些调用的响应。有关详细信息,请参阅管理异步调用

  7. 如果您在 EC2 容器实例上托管,请检查所有 Amazon EBS 卷和网络接口是否有过度使用的迹象。有关详细信息,请参阅如何解决 EC2 实例上的 EBS 卷性能问题?如果检测到 EBS 节流的迹象,请查看并增加 EBS 预调配 IOPS 和吞吐量类型。或者,使用其他选项,例如实例存储或 Elastic Fabric Adapter (EFA)。

    如果您检测到网络接口节流的迹象,请使用具有更多网络带宽的较大实例类型。或者,使用可提供更大的优化基准的网络增强型实例类型。有关详细信息,请参阅为什么我的 Amazon EC2 实例在平均利用率很低时会超过其网络限制?

  8. 如果您在 AWS Fargate 上托管,请使用 Amazon ECS 网络 sidecar 容器检查网络接口指标。请注意,必须使用新的任务定义进行部署才能添加 sidecar 容器。

AWS 官方
AWS 官方已更新 1 个月前