我想了解我们的Apache 2.2 error_log中的以下消息发生了什么:
Wed May 18 21:03:29 2011] [error] [client 172.20.10.10] (70007)The timeout specified has expired: proxy: error reading status line from remote server super-load1-ga.test.com, referer: https://tester2.test.com/boom/ga/inside.as
p
我们使用mod_proxy运行Apache 2.2。 这个Apache是否在httpd.conf中超时了与其5分钟TimeOut值相关的请求? (这意味着它在5分钟内没有收到来自远程服务器的响应)或者这只是远程服务器的响应,说它不能处理连接?
在我看到这个错误的时候,Apache很快就用完了MaxClients。
代理入口的快速示例:
ProxyPass /boom/ga https://super-load1-ga.test.com ProxyPassReverse /boom/ga https://super-load1-ga.test.com
您在ProxyPass指令中增加超时:
ProxyPass /boom/ga https://super-load1-ga.test.com connectiontimeout=300 timeout=300
超时值以秒为单位 。
这听起来像你的服务器在htts://super-load1-ga.test.com花了很长的时间来回应。
在这种情况下,如果它只是坐在那里,那么Apache进程将等待它。 这个过程基本上是被阻止的,即不能做任何事情。 如果你没有足够快的时间,那么你将会耗尽Apache进程,并且打击MaxClients,这似乎都是有道理的。
您应该在super-load1-ga.test.com网站上login以查看请求所花费的时间,他们必须花费一定的时间。
您可能会缩短ProxyPass连接上的超时时间
http://httpd.apache.org/docs/current/mod/mod_proxy.html#workers
为了回答你的问题,是的,Apache2 httpd在代理模式下确实logging了当Apache2 httpd超时时的错误消息。 如果在代理模式下连接到Apache2 httpd的服务器是原因,则会有不同的消息。
该消息具有多个部分: The timeout specified has expired
是与APR_TIMEUP
错误代码等价的文本,请参阅:
srclib / APR /其它/ UNIX / errorcodes.c
case APR_TIMEUP: return "The timeout specified has expired";
然后proxy: error reading status line from remote server super-load1-ga.test.com
模块/代理/ mod_proxy_http.c
如果您将日志级别调高到APLOG_DEBUG,则应该看到一条附加消息: proxy: read timeout
。