You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@httpd.apache.org by "King Holger (CI/AFP2)" <Ho...@de.bosch.com> on 2011/02/17 09:47:50 UTC
[users@httpd] FW: TimeOut expired | Multiple Balancers using multiple workers |
Apache 2.2.17
We identified the root-cause:
- due to the same "BalancerMembers" (incl. route-names) for "fs4_javaclient_over_http"
and "fs4_webclient_over_http", requests that are routed to "fs4_webclient_over_http"
do take the timeout of 90 seconds of "fs4_javaclient_over_http".
So, it seems to be the only solution to really separate both by specifying unique
BalancerMembers (using unique "route"-names).
The consequence: the tomcat configuration has to be adapted as well.
Do you agree?
________________________________
From: King Holger (CI/AFP2) [mailto:Holger.King@de.bosch.com]
Sent: Mittwoch, 16. Februar 2011 21:43
To: 'users@httpd.apache.org'
Subject: [users@httpd] TimeOut expired | Multiple Balancers using multiple workers | Apache 2.2.17
Hi group,
we have the following topology up and running:
Apache2 (works as load-balancer)
| |
Tomcat1 Tomcat2
(rb-wcmstc1) (rb-wcmstc2)
using the following TWO balancers named "fs4_javaclient_over_http" and "fs4_webclient_over_http"
specifying DIFFERENT TIMEOUT VALUES with "90" and "660" seconds:
<Proxy balancer://fs4_javaclient_over_http>
BalancerMember ajp://rb-wcmstc1.xx.xxxxx.xxx:8009 loadfactor=100 retry=10 route=rb-wcmstc1 connectiontimeout=5 timeout=90
BalancerMember ajp://rb-wcmstc2.xx.xxxxx.xxx:8009 loadfactor=100 retry=10 route=rb-wcmstc2 connectiontimeout=5 timeout=90
ProxySet stickysession=JSESSIONID|jsessionid
ProxySet lbmethod=byrequests
ProxySet scolonpathdelim=On
ProxySet nofailover=Off
</Proxy>
<Proxy balancer://fs4_webclient_over_http>
BalancerMember ajp://rb-wcmstc1.xx.xxxxx.xxx:8009 loadfactor=100 retry=10 route=rb-wcmstc1 connectiontimeout=5 timeout=660
BalancerMember ajp://rb-wcmstc2.xx.xxxxx.xxx:8009 loadfactor=100 retry=10 route=rb-wcmstc2 connectiontimeout=5 timeout=660
ProxySet stickysession=JSESSIONID|jsessionid
ProxySet lbmethod=byrequests
ProxySet scolonpathdelim=On
ProxySet nofailover=Off
</Proxy>
Incoming requests for ONE TYPE of HTTP-Client are using the "fs4_javaclient_over_http" balancer via:
RewriteCond %{REQUEST_URI} ^/servlet/ClientIO/* [NC]
RewriteRule ^/(.*) balancer://fs4_javaclient_over_http/$1 [proxy,last]
the other HTTP-CLIENT is using "fs4_webclient_over_http":
RewriteCond %{REQUEST_URI} !^/servlet/ClientIO/* [NC]
RewriteCond %{REQUEST_URI} !^/index.html
RewriteRule ^/(.*) balancer://fs4_webclient_over_http/$1 [proxy,last]
This is done to separate connection losts for long running requests. Formerly, when one Client provoked
a request that took longer than the configured "timeout" value, both clients lost their connection due to a Tomcat switch.
THE PROBLEM
- in Apache2 "error_log" we see that a TIMEOUT HAS EXPIRED:
[Wed Feb 16 19:43:08 2011] [error] (70007)The timeout specified has expired: ajp_ilink_receive() can't receive header
This leads to a switching of the Tomcat from "rb-wcmstc1" to "rb-wcmstc2"
or vice versa only for requests that run over the "fs4_webclient_over_http"
balancer.
But It's really strange, that we can't find any request that takes longer
than the configured TIMEOUT parameter of "660" seconds (see config
above) within the Apache2 ACCESS-Log. What we can see is: there
are long running requests - but they do not reach the value of 660 seconds.
When enabling "debug" LogLevel we see more details (see excerpt enclosed).
Our questions:
- is the configuration okay?
- which timeout is expired? (connectiontimeout?, replytimeout?, etc.)
- why does it happen?
- is it a Tomcat connection-problem?