AWS ELB 出現 5xx, 502 idle timeout 設定

2019-12-28 Apache, AWS

這幾天接獲通報 ELB 的 Metric 有出現 5xx, 502 的訊息,但是應用面沒問題,所以開始來查問題。

  • CLB:5xx metric
  • ALB:502 metric

從 CloudWatch 上發現偶爾會出現 502 的錯誤,都是由 ELB 產生的而不是 Backend instance,詳細查看 Log 後其實都沒有特殊的異常,發想可能是 ELB 和 EC2 之間溝通出了問題。

有經驗的同事找了之前看過相似的文章「AWS Application ELB sometimes responds 502 without calling the backend」,發現原來是因為 Backend instance 提早回收了 Connection 導致 ELB Connection failed。

Backend instance 使用的是 Apache 2.4 在預設的情況下

一般情況下的 HTTP 傳輸不會超過 5 秒,所以多數 request 都不會有問題,而少數可能系統忙碌造成超過 5 秒就會被 Apache 提早回收,此時 ELB 就會被切斷而產生 502 錯誤訊息。

遇到這樣的問題,基本上要考量幾件事:

  1. Request time 超過 5 秒導致 Apache 回收是否合理?程式效能不好或者是需要加 Instance or Upgrade spec?
  2. 如果超過 5 秒為正常情況,那麼就要調整 Apache KeepAlive 的數值,數值範圍必須是 ELB Timeout > Apache KeepAlive。
  3. 整條 Request connection pipeline 的 timeout/keepalive 等設定是否都不少於「最短回收時間」

以這個案例,直接調整 Apache KeepAliveTimeout 即可


...
  KeepAlive On
  KeepAliveTimeout 60
...

給 Mr. 沙先生一點建議

彙整

分類

展開全部 | 收合全部

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱