Tomcat servlet mapping error after Broken pipe error

We have implemented Servlet 3.0 AsyncContext in Tomcat Version: 7.0.23.

It runs on RHEL 6.1 using OpenJDK version 1.6.0_24,64-bit server

The app works great for the most part. If any network violations occur, updating from the server cannot reach the client, because there is an exception " ClientAbortException: java.net.SocketException: Broken pipe ". which is caught and ignored.

It happens on a line,

 asyncContext.getResponse().getWriter().println(updateStr); 

After that, Tomcat goes crazy and redirects URLs to unexpected servlets. For example, when matching / query with the SessionManager servlet, the URL mysite.com/index.html directed to the SessionManager servlet. Restarting tomcat solves the problem.

Any guidance on why this is happening and how to solve it?

To add more data, the following exception stack trace.

 ClientAbortException: java.net.SocketException: Broken pipe at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:346) at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:306) at org.apache.catalina.connector.Response.flushBuffer(Response.java:568) at org.apache.catalina.connector.ResponseFacade.flushBuffer(ResponseFacade.java:307) at com.management.TestHandler$TestInfo.statusUpdate(TestHandler.java:638) at com.chakra.ipbtt.TestObject.publish(TestObject.java:1626) at com.chakra.ipbtt.TestObject.handlePublish(TestObject.java:1421) at com.chakra.ipbtt.TestObject.executeCommand(TestObject.java:1371) at com.chakra.ipbtt.TestObject.executeCommand(TestObject.java:1388) at com.chakra.ipbtt.TestObject.executeCommand(TestObject.java:1388) at com.chakra.ipbtt.TestObject.executeCommand(TestObject.java:1388) at com.chakra.ipbtt.TestObject.executeCommand(TestObject.java:1388) at com.chakra.ipbtt.TestObject.executeCommand(TestObject.java:1388) at com.chakra.ipbtt.TestObject.executeTest(TestObject.java:1791) at com.management.TestHandler.executeTest(TestHandler.java:420) at com.management.TestHandler.handleNewTest(TestHandler.java:222) at com.management.TestMgr.processRequest(TestMgr.java:71) at com.management.TestMgr.doPost(TestMgr.java:105) at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:690) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:477) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329) at com.management.SessionMgr.processRequest(SessionMgr.java:131) at com.management.SessionMgr.doPost(SessionMgr.java:164) at javax.servlet.http.HttpServlet.service(HttpServlet.java:641) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.management.SessionsFilter.doFilter(SessionsFilter.java:127) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:636) Caused by: java.net.SocketException: Broken pipe at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) at java.net.SocketOutputStream.write(SocketOutputStream.java:153) at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:215) at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:462) at org.apache.coyote.http11.InternalOutputBuffer.flush(InternalOutputBuffer.java:119) at org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.java:789) at org.apache.coyote.Response.action(Response.java:174) at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:341) ... 48 more` 
+6
source share
1 answer

Sounds like a bug on the Tomcat side.

First, I would try updating Apache Tomcat 7.0. 64 .

Secondly, I would try to upgrade to Java 6u 45 .

0
source

Source: https://habr.com/ru/post/920860/


All Articles