New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
我想要針對 Amazon Elastic Container Service (Amazon ECS) 應用程式回應請求較慢的問題進行疑難排解。
以下是 ECS 任務高延遲問題的常見原因:
若要調查並解決這些問題,請先嘗試找出延遲發生的位置,然後完成解決步驟。
若要針對 ECS 任務的高延遲問題進行疑難排解,請完成以下步驟:
執行以下命令來測量第一個位元組回應,並檢查可能導致延遲的緩慢 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
注意: 上述輸出範例是以毫秒為時間單位。最佳做法是從 VPC 內部執行初始測試,以減少不同網路路徑中涉及的變數。
接下來,繞過負載平衡器。使用已知正在執行任務的任務 IP 位址來指向前面的 curl 命令。此過程有助於隔離導致延遲的元件。
如果有 Application Load Balancer,請檢查 Amazon CloudWatch TargetResponseTime 指標的平均統計資料是否有過多的值。
如果該值很高,則表示您的任務有問題,或者應用程式可能依賴外部連線。如需更多資訊,請參閱如何疑難排解 Application Load Balancer TargetResponseTime 指標增加的問題?
如果有大量任務,請啟動並查看 Application Load Balancer 的存取日誌項目,以識別後端執行個體。
若要確認 Application Load Balancer 的問題,請查看日誌項目中的 request_processing_time 和 response_processing_time 欄位,看是否有異常高的時間區間。如需詳細資訊,請參閱如何對 Elastic Load Balancing 中的 Application Load Balancer 的高延遲問題進行疑難排解? 如果您直接使用 curl 查詢任務 IP 位址且其回應緩慢,請查看 CloudWatch Container Insights。
如果 CPU 和記憶體使用率平均低於 90% 且沒有峰值,請檢查可能導致延遲的應用程式任務相依性。相依性包括對外部資源的呼叫,例如 Amazon Simple Storage Service (Amazon S3) 儲存貯體、Amazon Relational Database Service (Amazon RDS) 資料庫或其他遠端 Web 服務。
如果外部呼叫是應用程式預期工作流程的一部分,請與應用程式的開發人員確認是否對外部相依性進行同步呼叫。或者,鎖定應用程式直到它收到對這些呼叫的回應。如需詳細資訊,請參閱管理非同步呼叫。
如果您在 EC2 容器執行個體上託管,請檢查任何 Amazon EBS 磁碟區和網路介面是否有過度使用的跡象。如需詳細資訊,請參閱如何對 EC2 執行個體上的 EBS 磁碟區效能問題進行疑難排解? 如果偵測到 EBS 限流的跡象,則檢查並增加 EBS 佈建 IOPS 和輸送量類型。或者,使用其他選項,例如執行個體儲存體或 Elastic Fabric Adapter (EFA)。
如果您偵測到網路介面限流的跡象,請使用具有更多網路頻寬的較大執行個體類型。或者,使用提供更大最佳化基準的網路增強執行個體類型。有關更多資訊,請參閱為什麼當平均使用率較低時,我的 Amazon EC2 執行個體會超出其網路限制?
如果您在 AWS Fargate 上託管,請檢查使用 Amazon ECS 網路附屬容器的網路介面指標。請注意,您必須使用新的任務定義進行部署才能新增附屬容器。