クライアントで、ロードバランサーへの接続時にエラー「HTTP: 503 Service Unavailable」または「HTTP: 504 Gateway Timeout」が発生することがあります。Amazon CloudWatch を使用してロードバランサーをモニタリングしていると、SurgeQueueLength メトリクスの max 統計値が大幅に大きくなっていることがわかりました。この値は、登録されたインスタンスに対して保留されている (キューに入れられている) リクエストの合計数を示します。

注意
最大 SurgeQueueLength を超えた場合、SpilloverCount メトリクスの sum 統計で、キューがいっぱいになったために拒否されたリクエストの合計数の評価が開始されます。最大 SurgeQueueLength 値は 1,024 です。

サージキュー長は、Elastic Load Balancing (ELB) によってキューに入れられているリクエストの数によって定義されます。バックエンドシステムでリクエストの受信に処理が追いつかない場合、処理を待つリクエストはキューに入れられます。ロードバランサーの SurgeQueueLength の max 統計が最大値になる理由として以下のことが考えられます。

  • バックエンドインスタンスの過負荷 - バックエンドインスタンスのリソース (CPU、メモリ、ネットワーク) が過負荷になっており、受信したリクエストを十分に処理できなくなっている可能性があります。
  • アプリケーションの依存関係の問題 - 最新のウェブアプリケーションの中には、外部リソース (データベース、S3 バケット、他のアプリケーションなど) への複数の依存関係が必要なものがあります。アプリケーションの外部依存関係によるパフォーマンスの問題がある場合、アプリケーションのパフォーマンスが影響を受けます。たとえば、アプリケーションが依存しているデータベーステーブルで適切にインデックスが作成されていない場合は、データベースのパフォーマンスによってアプリケーションのパフォーマンスが悪影響を受けている可能性があります。
  • 最大接続数への到達 - バックエンドウェブサーバーが許容される最大接続数に達して、新しいリクエストを処理できなっている可能性があります。

キュー長の急増と過剰数の問題を軽減するには、以下の手順に従います。

  1. Auto Scaling 開発者ガイドの「Auto Scaling グループの負荷分散」で説明しているように、Elastic Load Balancing と Auto Scaling を有効にします。
  2. Amazon CloudWatch を使用したロードバランサーのモニタリング」で説明しているように、Amazon CloudWatch を使用してロードバランサーをモニタリングします。
  3. Amazon EC2 インスタンスに関する詳細モニタリングの有効化または無効化」で説明しているように、Amazon CloudWatch を使用して、バックエンドインスタンスの CPUUtilization メトリクスをモニタリングすることで、CPU 使用率にスパイクがあるかどうか調べます。特定の Amazon EC2 インスタンスの統計を取得するには、「特定の EC2 インスタンスの統計を取得する」を参照してください。CPU 使用率にスパイクがある場合は、バックエンドインスタンスが既存のリクエストを処理中で新しいリクエストを受け入れない可能性が高くなっています。このシナリオでは、バックエンドインスタンスをスケールアウトするか、追加の処理能力を備えたタイプ(コンピューティング最適化(C4)インスタンスなど)にバックエンドのインスタンスをスケールアップすることが役立つことがあります。Amazon EC2 インスタンスのタイプと容量については、「Amazon EC2 インスタンス」を参照してください。
  4. Elastic Load Balancing のトラブルシューティング: HTTP エラー」で説明しているように、ロードバランサーによって返された特定の HTTP エラーのトラブルシューティングを行うための推奨事項に従います。ロード関連の問題では一般的に、HTTP 503: Service Unavailable または HTTP 504: Gateway Timeout エラーが返されます。
  5. バックエンドウェブサーバーが許容される最大接続数を超えたことが、キュー長の急増の原因であるとわかった場合は、各プロセスで利用可能な子プロセスまたはスレッドの数を増やす必要があります。たとえば、Apache ウェブサーバーの以下の設定ファイルは、各プロセスに利用可能な子プロセスまたはスレッドの数を増やすように変更できます。
       StartServers                 8
       MinSpareServers          5
       MaxSpareServers         20
       ServerLimit                   256
       MaxClients                   256
       MaxRequestsPerChild 4000
  6. 時間の経過につれて、ウェブサーバーでトラフィックが増えるのは珍しいことではありません。この状況になると、インスタンスが過負荷になり、今度はパフォーマンスに影響を与える可能性があります。この状況に対処するには、「インスタンスのサイズ変更」で説明しているように、容量を増やすことを検討してください。

Elastic Load Balancing, VPC, SurgeQueueLength, CPUUtilization, Amazon CloudWatch, パフォーマンス, リソース不足, ウェブサーバーの設定, 容量


このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。