We recently upgraded to Tomcat 6.0.16 and Apache 2.2.8. We started
receiving intermittent exceptions that we hadn't seen under Tomcat 5.0
and Apache 2.0. They usually occur when we are receiving moderate to
heavy traffic, but we have never seen two thrown the same day closer
than 15 minutes apart. I wish I could say they always occur when we
are experiencing our heaviest loads, but this is not the case. I've
checked the access logs and compared them to the error logs. The
times don't match.
The message I receive is "Exception while dispatching incoming RPC
call java.io.IOException: Socket read failed." I found one thread
which mentions "socket read failed" in context with Tomcat native code
and AJAX,
http://www.velocityreviews.com/forums/t524769-tomcat-exception-thrown-whilst-processing-posted-parameters.html.
I don't know if they were using GWT, but we are. There are two
possible solutions to the problem in that thread. One is to remove
the Tomcat native code, the other is to upgrade to Tomcat 6.0.13. The
thread mentions a bug report,
http://issues.apache.org/bugzilla/show_bug.cgi?id=40960.
The bug appears to be associated with request timeouts. Our exception
does not appear to be a timeout issue.
I would like to keep the Tomcat native code if at all possible since
it is supposedly more efficient. I can't "upgrade" to 6.0.13 since
I'm already at 6.0.16, and I would hate to downgrade if I don't need
to. Has anyone run into this problem? Does anyone know what would
cause this exception to be thrown? Does anyone have any suggestions?
We are currently using GWT version 1.4.62 on Windows Server 2003.
Here is a copy of the stack trace I'm seeing in the logs:
2008-07-07 16:57:23,212 ERROR org.apache.catalina.core.ContainerBase.
[Catalina].[localhost].[/etime] - Exception while dispatching incoming
RPC call
java.io.IOException: Socket read failed
at org.apache.coyote.ajp.AjpAprProcessor.read(AjpAprProcessor.java:
1019)
at
org.apache.coyote.ajp.AjpAprProcessor.readMessage(AjpAprProcessor.java:
1141)
at org.apache.coyote.ajp.AjpAprProcessor.receive(AjpAprProcessor.java:
1073)
at org.apache.coyote.ajp.AjpAprProcessor
$SocketInputBuffer.doRead(AjpAprProcessor.java:1211)
at org.apache.coyote.Request.doRead(Request.java:428)
at
org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:
298)
at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:405)
at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:
313)
at
org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:
193)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.readPayloadAsUtf8(RemoteServiceServlet.java:
129)
at
com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:
178)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
233)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
175)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
128)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
102)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
286)
at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:
419)
at org.apache.coyote.ajp.AjpAprProtocol
$AjpConnectionHandler.process(AjpAprProtocol.java:378)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:
1509)
at java.lang.Thread.run(Unknown Source)