Hello.

Hope anyone there can help me with this issue. I'm dealing with this for the 
past 2 weeks and cannot solve it completely nor locate the root cause. 

I have an environment with 2 boxes load balanced with mod_proxy_ajp. Each box 
have 1 Apache HTTP and 1 Tomcat. To illustrate this:

Box A:
 . Tomcat A (6.0.29, x64)
 . Apache A (2.2.22)

Box B:
 . Tomcat B (6.0.29, x64)
 . Apache B (2.2.22)

Apache A and B have identical setup, each one balances to both Tomcat A and B.

Also, there's a third application in Box C with another application being 
proxied by Apache A and Apache B.
Box C:
 . Tomcat C (6.0.20, x86)

All boxes runs Windows 2008 R2 x64, have the Windows Firewall started but not 
enabled.
Box A and Box B are part of a Windows NLB Domain, but all references in the 
proxy configuration are made using the hosts private IP addresses. Users use 
the NLB IP address to connecto to Apache.

Apache proxy is configured like:
== begin httpd.conf ==
Timeout 600
LimitRequestFieldSize 20480
ProxyIOBufferSize 21504
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
  Order deny,allow
  Allow from all
</Proxy>
<Proxy balancer://wlb>
  BalancerMember ajp://10.11.102.224:9109 route=wt1 loadfactor=50 max=85 
ttl=120 retry=5 connectiontimeout=5000ms ping=5000ms
  BalancerMember ajp://127.0.0.1:9109 route=wt2 loadfactor=50 max=85 ttl=120 
retry=5 connectiontimeout=5000ms ping=5000ms
</Proxy>
ProxyPass /app1 balancer://wlb/app1 stickysession=JSESSIONID nofailover=On
ProxyPass /app2 ajp://10.11.102.219:8009/app2
== end httpd.conf ==

Tomcat A and Tomcat B AJP connector is configured like:
<Connector port="9109" protocol="AJP/1.3" redirectPort="8443" 
packetSize="22528" maxThreads="200" connectionTimeout="120000"/>

Tomcat C is configured like:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

The load is not high and there are a few users using the applications. This is 
the production environment, I could not trace an operation to reproduce this 
behavior in a controlled environment.
The "Box C" application "app2" shown above runs fine, not a single error 
message.

The timeout parameters for app1 (Tomcat A and B) were configured in an attempt 
to solve the problem shown here. When using the default (no connectiontimeout, 
no ping, no ttl, no retry) other communications failures were happening.

Now, the problem: the AJP communication between Apache A/B and Tomcat A/B is 
bad. The following can be seen in the Apache logs:

== begin apache log ==
[Tue May 29 14:43:59 2012] [error] (OS 10060)A connection attempt failed 
because the connected party did not properly respond after a period of time, or 
established connection failed because connected host has failed to respond.  : 
ajp_ilink_receive() can't receive header
[Tue May 29 14:43:59 2012] [error] ajp_read_header: ajp_ilink_receive failed
[Tue May 29 14:43:59 2012] [error] (70007)The timeout specified has expired: 
proxy: dialog to 127.0.0.1:9109 (127.0.0.1) failed
[Tue May 29 14:44:42 2012] [error] [client 10.45.7.78] File does not exist: 
E:/Apache/htdocs/favicon.ico
[Tue May 29 14:45:08 2012] [error] [client 10.45.6.233] File does not exist: 
E:/Apache/htdocs/favicon.ico
[Tue May 29 14:45:17 2012] [error] [client 10.45.6.100] File does not exist: 
E:/Apache/htdocs/favicon.ico
[Tue May 29 14:45:39 2012] [error] (OS 10060)A connection attempt failed 
because the connected party did not properly respond after a period of time, or 
established connection failed because connected host has failed to respond.  : 
ajp_ilink_receive() can't receive header
[Tue May 29 14:45:39 2012] [error] ajp_read_header: ajp_ilink_receive failed
[Tue May 29 14:45:39 2012] [error] (70007)The timeout specified has expired: 
proxy: dialog to 127.0.0.1:9109 (127.0.0.1) failed
[Tue May 29 14:45:39 2012] [error] proxy: BALANCER: (balancer://wlb). All 
workers are in error state for route (wt1)
[Tue May 29 14:54:40 2012] [error] (OS 10060)A connection attempt failed 
because the connected party did not properly respond after a period of time, or 
established connection failed because connected host has failed to respond.  : 
ajp_ilink_receive() can't receive header
[Tue May 29 14:54:40 2012] [error] ajp_read_header: ajp_ilink_receive failed
[Tue May 29 14:54:40 2012] [error] (70007)The timeout specified has expired: 
proxy: dialog to 127.0.0.1:9109 (127.0.0.1) failed
[Tue May 29 15:05:15 2012] [error] [client 200.251.3.133] File does not exist: 
E:/Apache/htdocs/favicon.ico
[Tue May 29 15:07:15 2012] [error] [client 10.45.6.54] File does not exist: 
E:/Apache/htdocs/favicon.ico
[Tue May 29 15:17:17 2012] [error] [client 10.45.8.22] File does not exist: 
E:/Apache/htdocs/favicon.ico
[Tue May 29 15:29:43 2012] [error] (OS 10060)A connection attempt failed 
because the connected party did not properly respond after a period of time, or 
established connection failed because connected host has failed to respond.  : 
ajp_ilink_receive() can't receive header
[Tue May 29 15:29:43 2012] [error] ajp_read_header: ajp_ilink_receive failed
[Tue May 29 15:29:43 2012] [error] (70007)The timeout specified has expired: 
proxy: dialog to 10.11.102.223:9109 (10.11.102.223) failed
[Tue May 29 15:29:44 2012] [error] proxy: BALANCER: (balancer://wlb). All 
workers are in error state for route (wt2)
[Tue May 29 15:29:58 2012] [error] [client 10.45.7.225] File does not exist: 
E:/Apache/htdocs/favicon.ico
[Tue May 29 15:48:03 2012] [error] [client 10.45.7.230] File does not exist: 
E:/Apache/htdocs/favicon.ico
[Tue May 29 15:48:08 2012] [error] (OS 10060)A connection attempt failed 
because the connected party did not properly respond after a period of time, or 
established connection failed because connected host has failed to respond.  : 
ajp_ilink_receive() can't receive header
[Tue May 29 15:48:08 2012] [error] ajp_read_header: ajp_ilink_receive failed
[Tue May 29 15:48:08 2012] [error] (70007)The timeout specified has expired: 
proxy: dialog to 127.0.0.1:9109 (127.0.0.1) failed
[Tue May 29 15:48:09 2012] [error] proxy: BALANCER: (balancer://wlb). All 
workers are in error state for route (wt1)
[Tue May 29 15:48:09 2012] [error] proxy: BALANCER: (balancer://wlb). All 
workers are in error state for route (wt1)
== end apache log ==

In the Tomcat log we have:
== begin tomcat log ==
29/05/2012 11:11:39 org.apache.jk.common.ChannelSocket processConnection
AVISO: processCallbacks status 2
29/05/2012 11:21:01 org.apache.jk.common.ChannelSocket processConnection
AVISO: processCallbacks status 2
29/05/2012 15:34:09 org.apache.jk.common.ChannelSocket processConnection
AVISO: processCallbacks status 2
29/05/2012 15:39:15 org.apache.jk.core.MsgContext action
AVISO: Unable to send headers
java.net.SocketException: Software caused connection abort: socket write error
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
        at org.apache.jk.common.ChannelSocket.send(ChannelSocket.java:537)
        at org.apache.jk.common.JkInputStream.appendHead(JkInputStream.java:326)
        at org.apache.jk.core.MsgContext.action(MsgContext.java:266)
        at org.apache.coyote.Response.action(Response.java:183)
        at org.apache.coyote.Response.sendHeaders(Response.java:379)
        at 
org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:305)
        at 
org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:273)
        at 
org.apache.catalina.connector.Response.finishResponse(Response.java:493)
        at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:322)
        at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:774)
        at 
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
        at 
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:896)
        at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
        at java.lang.Thread.run(Thread.java:662)
29/05/2012 15:39:15 org.apache.jk.common.ChannelSocket processConnection
AVISO: processCallbacks status 2
29/05/2012 15:56:58 org.apache.jk.common.ChannelSocket processConnection
GRAVE: Error, processing connection
java.net.SocketException: Software caused connection abort: socket write error
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
        at org.apache.jk.common.ChannelSocket.send(ChannelSocket.java:537)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:339)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:774)
        at 
org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703)
        at 
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:896)
        at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
        at java.lang.Thread.run(Thread.java:662)
29/05/2012 15:56:58 org.apache.jk.common.ChannelSocket processConnection
[...]
== end tomcat log ==

Not sure if they are really related as the error messages from Apache and 
Tomcat are not shown at the same time. These log files are from the same host.

Before configuring the Apache "ping" option and the Tomcat "connectionTimeout", 
different errors where being shown. Also, I have upgraded from Apache 2.2.21 in 
the hope that application timeouts didn't make the node in the "error state" 
anymore.

This problem may have a bigger impact when we have more users using the 
application.

Hope someone can bring some light to this issue.
Today I'm going to alter the configuration and add the "disablereuse=On" to try 
again to isolate the cause.

Thanks!
Roney


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to