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
注: 上記の出力例は、ms 単位での期間を示しています。VPC の内部から初期テストを実行することで、さまざまなネットワーク経路に関係する変数を削減することがベストプラクティスです。
次に、ロードバランサーをバイパスします。既知の実行中タスクの Task 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 の遅延が大きい場合のトラブルシューティング方法を教えてください」を参照してください。 Task IP アドレスに直接 curl を実行し、応答が遅い場合は、CloudWatch Container Insights を確認します。
CPU とメモリの平均使用率が 90% 未満であり、急増が起こっていない場合は、遅延の原因となるアプリケーションタスクへの依存関係があるかどうかを確認します。Amazon Simple Storage Service (Amazon S3) バケット、Amazon Relational Database Service (Amazon RDS) データベースやその他のリモートウェブサービスなどの、外部リソースへの呼び出しが依存関係に該当します。
外部呼び出しがアプリケーションの想定されるワークフローに含まれている場合は、外部依存関係への同期呼び出しを行っているかどうかをアプリケーションの開発者に確認してください。または、アプリケーションがこれらの呼び出しに対する応答を受信するまで、アプリケーションをロックします。詳細については、「非同期呼び出しを管理する」を参照してください。
EC2 コンテナインスタンスでホストしている場合は、Amazon EBS ボリュームとネットワークインターフェイスで過剰使用の兆候がないかどうかを確認します。詳細については、「EC2 インスタンスでの EBS ボリュームのパフォーマンスに関する問題をトラブルシューティングする方法を教えてください」を参照してください。 EBS でスロットリングの兆候が検出された場合は、EBS のプロビジョンド IOPS とスループットタイプを確認したうえで、増やします。または、インスタンスストアや Elastic Fabric Adapter (EFA) など、別のオプションを使用してください。
ネットワークインターフェイスでスロットリングの兆候がある場合は、より大きいネットワーク帯域幅を持つ、大きいインスタンスタイプを使用してください。または、より大きな最適化されたベースラインを持つネットワーク拡張インスタンスタイプを使用してください。詳細については、「平均使用率が低いにもかかわらず、Amazon EC2 インスタンスがネットワーク制限を超過する理由を知りたいです」を参照してください。
AWS Fargate でホストしている場合は、Amazon ECS ネットワークサイドカーコンテナでのネットワークインターフェイスのメトリクスを確認してください。サイドカーコンテナを追加するには、新しいタスク定義を使用してデプロイする必要があります。