Amazon ECS タスクへの呼び出しまたはリクエストの遅延をトラブルシューティングする方法を教えてください。

所要時間2分
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. 次に、ロードバランサーをバイパスします。既知の実行中タスクの Task IP アドレスを使用して上記の curl を実行します。このプロセスは、遅延の原因となるコンポーネントを特定するのに役立ちます。

  3. Application Load Balancer がある場合は、Amazon CloudWatch の TargetResponseTime メトリクスの平均統計情報に過剰な値がないか確認します。

    この値が高い場合は、タスクに問題があるか、外部接続に対するアプリケーションの依存関係がある可能性があります。詳細については、「Application Load Balancer で TargetResponseTime メトリクスが増加している場合のトラブルシューティング方法を教えてください」を参照してください。

    タスクの数が多い場合は、Application Load Balancer のアクセスログエントリをアクティブにしてレビューし、バックエンドインスタンスを特定します。

  4. Application Load Balancer に問題があるかどうかを確認するには、ログエントリの request_processing_time および response_processing_time フィールドに過度に長い期間があるかどうかを確認します。詳細については、「Elastic Load Balancing で、Application Load Balancer の遅延が大きい場合のトラブルシューティング方法を教えてください」を参照してください。 Task IP アドレスに直接 curl を実行し、応答が遅い場合は、CloudWatch Container Insights を確認します。

  5. CPU とメモリの平均使用率が 90% 未満であり、急増が起こっていない場合は、遅延の原因となるアプリケーションタスクへの依存関係があるかどうかを確認します。Amazon Simple Storage Service (Amazon S3) バケット、Amazon Relational Database Service (Amazon RDS) データベースやその他のリモートウェブサービスなどの、外部リソースへの呼び出しが依存関係に該当します。

  6. 外部呼び出しがアプリケーションの想定されるワークフローに含まれている場合は、外部依存関係への同期呼び出しを行っているかどうかをアプリケーションの開発者に確認してください。または、アプリケーションがこれらの呼び出しに対する応答を受信するまで、アプリケーションをロックします。詳細については、「非同期呼び出しを管理する」を参照してください。

  7. EC2 コンテナインスタンスでホストしている場合は、Amazon EBS ボリュームとネットワークインターフェイスで過剰使用の兆候がないかどうかを確認します。詳細については、「EC2 インスタンスでの EBS ボリュームのパフォーマンスに関する問題をトラブルシューティングする方法を教えてください」を参照してください。 EBS でスロットリングの兆候が検出された場合は、EBS のプロビジョンド IOPS とスループットタイプを確認したうえで、増やします。または、インスタンスストアや Elastic Fabric Adapter (EFA) など、別のオプションを使用してください。

    ネットワークインターフェイスでスロットリングの兆候がある場合は、より大きいネットワーク帯域幅を持つ、大きいインスタンスタイプを使用してください。または、より大きな最適化されたベースラインを持つネットワーク拡張インスタンスタイプを使用してください。詳細については、「平均使用率が低いにもかかわらず、Amazon EC2 インスタンスがネットワーク制限を超過する理由を知りたいです」を参照してください。

  8. AWS Fargate でホストしている場合は、Amazon ECS ネットワークサイドカーコンテナでのネットワークインターフェイスのメトリクスを確認してください。サイドカーコンテナを追加するには、新しいタスク定義を使用してデプロイする必要があります。

AWS公式
AWS公式更新しました 1ヶ月前
コメントはありません

関連するコンテンツ