How to solve AWS ELB/EC2 HTTP 503 with timeout settings?
我从一个由 ELB 后面的 2 个 t2.medium 实例组成的站点收到间歇性但经常出现的 503 错误("服务不可用:后端服务器已满负荷")。没有一个负载特别重,所有监控似乎都正常。
这里的 AWS 文档:
http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-error-message.html
说一个潜在的原因是 ELB 和 EC2 之间的超时设置不匹配:"将 keep-alive 超时设置为大于或等于负载均衡器的空闲超时设置"
EC2s 上的 Apache conf 有:
- 保持活动状态
- MaxKeepAliveRequests 100
- 保持活动超时 5
负载平衡器上的空闲超时为 60 秒。
那么,这似乎是一个原因,但我不确定修复方法。增加 Apache KeepAliveTimeout 不是 - 我理解 - 通常建议,而且我同样不确定减少 ELB 上的空闲超时对站点性能的影响。
推荐的方法是什么?我如何才能了解我的设置的理想设置以及它处理的流量级别(目前大约 30-50 个请求/分钟)?
我会降低 ELB 中的空闲超时。客户端将需要更频繁地打开新连接,但它比重用保持连接的速度稍慢。
在 Apache 中将 keepalive 提高到 60 也可以修复 503,但是您需要注意不要耗尽连接或内存,尤其是使用 prefork mpm,因为您将在 keepalive 中使用更多的插槽。使用 worker mpm(或 event mpm,如果你不害怕"This MPM is experimental"警告),确保你有足够高的 MaxClients 来处理所有请求,但足够低,不会用完 memo。