web-dev-qa-db-ja.com

タイムアウト設定を使用してAWSELB / EC2 HTTP 503を解決するにはどうすればよいですか?

ELBの背後にある2つのt2.mediumインスタンスで構成されるサイトから、断続的ですが定期的な503エラー(「サービスを利用できません:バックエンドサーバーが容量にあります」)が発生します。特に重い負荷がかかっているものはなく、すべての監視は正常のようです。

AWSのドキュメントはこちら: http://docs.aws.Amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-error-message.html 潜在的な原因はタイムアウト設定の不一致であると述べていますELBおよびEC2:「キープアライブタイムアウトをロードバランサーのアイドルタイムアウト設定以上に設定する」

EC2のApacheconfには次のものがあります。

  • キープアライブオン
  • MaxKeepAliveRequests 100
  • KeepAliveTimeout 5

ロードバランサーのアイドルタイムアウトは60秒です。

したがって、これが原因のように思われますが、修正についてはよくわかりません。 Apache KeepAliveTimeoutを増やすことは、通常は推奨されませんが、ELBのアイドルタイムアウトを減らすことがサイトのパフォーマンスに与える影響についても同様に確信がありません。

推奨されるアプローチは何ですか?セットアップの理想的な設定と、それが処理するトラフィックレベル(現在は約30〜50リクエスト/分)をどのように把握できますか?

9
Wintermute

ELBのアイドルタイムアウトを下げます。クライアントは新しい接続をより頻繁に開く必要がありますが、キープアライブ接続を再利用するよりもわずかに遅くなります。

Apacheでキープアライブを60に上げると、503も修正されますが、キープアライブで使用されるスロットが増えるため、特にプリフォークmpmでは、接続やメモリが不足しないように注意する必要があります。ワーカーmpm(または「このMPMは実験的です」という警告を恐れていない場合はイベントmpm)を使用し、すべての要求を処理するのに十分な高さのMaxClientがあり、メモが不足しないように十分に低いことを確認してください。

3
at0mzk