Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services HTTP 504错误由ELB返回,即使主机运行正常并且能够为请求提供服务_Amazon Web Services_Amazon Ec2_Amazon Elb - Fatal编程技术网

Amazon web services HTTP 504错误由ELB返回,即使主机运行正常并且能够为请求提供服务

Amazon web services HTTP 504错误由ELB返回,即使主机运行正常并且能够为请求提供服务,amazon-web-services,amazon-ec2,amazon-elb,Amazon Web Services,Amazon Ec2,Amazon Elb,我有一个部署在AmazonWebServices(AWS)上的服务,特别是弹性负载平衡器(ELB)后面的两个实例。可用区域被选为所有三个us-west-2a、b、c 但在上述3个区域中,只有2个区域有实例在其中运行 问题是,尽管流量/负载不是太高,但我仍然经常从ELB收到HTTP504错误 日志行的内容如下 -1-1-150400 按顺序,--请求处理时间--backend处理时间--response处理时间--elb状态代码--backend状态代码--received字节--sent字节。

我有一个部署在AmazonWebServices(AWS)上的服务,特别是弹性负载平衡器(ELB)后面的两个实例。可用区域被选为所有三个us-west-2a、b、c 但在上述3个区域中,只有2个区域有实例在其中运行

问题是,尽管流量/负载不是太高,但我仍然经常从ELB收到HTTP504错误

日志行的内容如下

-1-1-150400

按顺序,--请求处理时间--backend处理时间--response处理时间--elb状态代码--backend状态代码--received字节--sent字节。

ELB空闲超时为60秒
KeepAlive
在后端实例上处于“打开”状态。来自ELB的请求的延迟正在检查中。我尝试过增加
KeepAliveTimeout
,但没有效果

有人知道如何进行吗?我甚至不知道这个问题的根本原因


PS:更像是第二个问题,在一些情况下(远低于后端甚至不接受请求时ELB返回的504),甚至后端返回504,然后ELB将其转发给客户端。据我所知,HTTP 504应该仅在后端超时时由代理返回。服务器本身如何返回504?

当后端连接超时时,ELB将在其访问日志的后端处理时间列中放置-1。想想看,现在发生的情况是,您的后端处理某些请求的时间超过60秒。要确认这一点,您可以检查您的延迟指标吗?查看此指标时请切换到最大值。这将证实我的猜测,如果你看到延迟经常达到60秒


得到确认后,您可能希望增加ELB和后端的空闲超时。

为了将来对其他人有所帮助,我将在此处发布我的发现:

1) 这5040个HTTP错误主要是因为logrotate重新加载apache,而不是优雅地重新启动。 当前AWS配置执行以下操作

/sbin/service httpd reload > /dev/null 2>/dev/null || true
因此,将service命令替换为
apachectl-k优雅
/sbin/service-httpd优雅

我的ec2实例上的文件位置:
/etc/logrotate.elasticbeanstalk.hourly/logrotate.elasticbeanstalk.httpd.conf


2) 因为在AWS中,logrotate频率在默认情况下太高(每小时一次),至少在我的用例中是这样,而这反过来又是每小时重新加载apache,所以我也减少了这个频率。

您可以分享ELB上可用的cloudwatch指标吗?另外,您是否可以分享您现有的ELB healthcheck类型以及ELB上有多少实例可用?您是否在例如Apache实例中配置了
MaxRequestsPerChild
?如果ELB与后端实例的持久连接在ELB使用该连接处理来自前端客户端的请求时终止,这也会导致客户端看到HTTP 504。@Shibashis 2个实例连接到ELB,如问题中所述。启用了详细的监控,包括后端5xx、ELB 5xx、延迟、健康主机、请求计数等。Healthcheck是一个简单的HTTP调用,超时时间为5秒,频率为10秒。@Castaglia我正在使用apache 2.4,默认配置为保持活动相关的东西,MaxKeepAliveRequests 100,KeepAliveTimeout of 5秒。健康主机计数是否下降?或者它是否保持恒定在2。如问题中所述,请求的延迟正在检查中。在最近一次事件中,我看到ELB的最大延迟仅为3秒。那么,您是如何将默认Beanstalk配置更改为使用
apachectl-k-grateful
?@MaartenSander在ebextensions中使用elasticbeanstalk容器_命令的,类似于下面的
命令:sed-i's/reload/generate/g'/etc/logrotate.d/logrotate.elasticbeanstalk.httpd.conf
。这将在每次部署时发生,因此自动缩放后进入的每台计算机都具有相同的属性。此外,如果您升级EBS环境,那么文件路径可能会从
/etc/logrotate.d/logrotate.elasticbeanstalk.httpd.conf
更改,因此无论何时升级EBS版本,您都必须小心。