如何使用超时设置解决 AWS ELB/EC2 HTTP 503?

Posted

技术标签:

【中文标题】如何使用超时设置解决 AWS ELB/EC2 HTTP 503?【英文标题】:How to solve AWS ELB/EC2 HTTP 503 with timeout settings? 【发布时间】:2015-06-13 02:48:19 【问题描述】:

我从一个由 ELB 后面的 2 个 t2.medium 实例组成的站点收到间歇性但经常出现的 503 错误(“服务不可用:后端服务器已满负荷”)。没有一个负载特别重,所有监控似乎都正常。

此处的 AWS 文档: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-error-message.html 说一个潜在的原因是 ELB 和 EC2 之间的超时设置不匹配:“将 keep-alive 超时设置为大于或等于负载均衡器的空闲超时设置”

EC2 上的 Apache conf 有:

KeepAlive 开启 MaxKeepAliveRequests 100 KeepAliveTimeout 5

负载平衡器上的空闲超时为 60 秒。

那么,这似乎是一个原因,但我不确定修复方法。增加 Apache KeepAliveTimeout 不是 - 我理解 - 通常建议,而且我同样不确定减少 ELB 上的空闲超时对站点性能的影响。

推荐的方法是什么?如何了解我的设置的理想设置以及它处理的流量级别(目前大约 30-50 个请求/分钟)?

【问题讨论】:

增加 apache 超时应该没问题,在 ELB 之后,因为 ELB 持有连接,而不是浏览器直接持有它们。试试看? 【参考方案1】:

我会降低 ELB 中的空闲超时。客户端将需要更频繁地打开新连接,但这只是比重用保持连接的速度稍慢。

在 Apache 中将 keepalive 提高到 60 也可以修复 503,但是您需要注意不要耗尽连接或内存,尤其是使用 prefork mpm,因为您将在 keepalive 中使用更多的插槽。使用 worker mpm(如果您不害怕“This MPM is experimental”警告,则使用 event mpm),确保您有足够高的 MaxClients 来处理所有请求,但要足够低以不会耗尽备忘录。

【讨论】:

以上是关于如何使用超时设置解决 AWS ELB/EC2 HTTP 503?的主要内容,如果未能解决你的问题,请参考以下文章

AWS Athena JDBC查询超时

如何设置 AWS Appsync 请求超时限制 || AWSAppSync 客户端未提供回调

尝试访问DynamoDB时,AWS Lambda node.js超时

约 30 秒后 AWS API 网关超时

AWS - 错误 504 - 网关超时 - Flask 应用程序

AWS 上的 Kops 集群超时