Mod cluster proxy timeout in apache error logs

krish3 picture krish3 · Dec 23, 2013 · Viewed 10.6k times · Source

In our environment we get these entries consistently in error logs.

[Sun Dec 22 20:29:43 2013] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Sun Dec 22 20:29:43 2013] [error] ajp_read_header: ajp_ilink_receive failed
[Sun Dec 22 20:29:43 2013] [error] (70007)The timeout specified has expired: proxy: read response failed from (null) (xx.xx.xx.xx)
[Sun Dec 22 20:30:01 2013] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header

If these errors appear from all nodes at once the site will be throwing a 998 response code until a restart which makes these errors disappear. Apache is communicating to Back end jboss servers.

What might be causing these issues. Based on my observation it might due to delay in webservice calls causing termination of AJP connection.

Please correct me if I am wrong and how can this issue be fixed permanently.

Thanks.

Answer

morgajel picture morgajel · Jan 21, 2014

(better late than never)

I had a similar issue;

[Mon Jan 20 13:39:57 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
[Mon Jan 20 13:43:26 2014] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header

Which led me to find this:

When nodeTimeout is not defined the ProxyTimeout directive Proxy is used. If ProxyTimeout is not defined the server timeout (Timeout) is used (default 300 seconds). nodeTimeout, ProxyTimeout or Timeout is set at the socket level.

I had neither a nodeTimeout nor a ProxyTimeout, which leaves us with the Timeout variable (which is set to 60 seconds). Under most situations, 60 seconds is sufficient for a webpage to return, however investigation into the app revealed a bad MySQL query was taking over 20 minutes (yes, minutes!) to run.

You could try increasing your timeouts, or more likely, figure out why the page is slow.