TomCat 上托管的 Play 项目中的随机错误:异常 ClientAbortException:null
我有一个托管在 tomcat 5.5 服务器上的示例项目,它使用 JDBC 连接到 MSSQL R2 数据库。但我经常随机地收到 ClientAbortException 并且我的应用程序崩溃。我能做些什么?调试没有帮助,因为我无法重现错误:
- 播放版本:1.2.3 和 1.2.4(两个版本都会发生错误)
- 机器:Windows Server 2003 和 2008
堆栈跟踪 错误~
@698gd0b9n
Internal Server Error (500)
Oops: ClientAbortException
An unexpected error occured caused by exception ClientAbortException: null
play.exceptions.UnexpectedException: Unexpected Error
at play.Invoker$Invocation.onException(Invoker.java:244)
at play.Invoker$Invocation.run(Invoker.java:286)
at play.server.ServletWrapper$ServletInvocation.run(ServletWrapper.java:548)
at play.Invoker.invokeInThread(Invoker.java:68)
at play.server.ServletWrapper.service(ServletWrapper.java:142)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:619)
Caused by: ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:370)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:352)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:396)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:385)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:83)
at play.server.ServletWrapper.copyResponse(ServletWrapper.java:493)
at play.server.ServletWrapper$ServletInvocation.execute(ServletWrapper.java:558)
at play.Invoker$Invocation.run(Invoker.java:278)
... 18 more
Caused by: java.net.SocketException: Connection reset by peer: 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.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:751)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:347)
at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:774)
at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:118)
at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:584)
at org.apache.coyote.Response.doWrite(Response.java:560)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:365)
... 26 more
I have a sample project hosted on the tomcat 5.5 server, that uses JDBC to connect to a MSSQL R2 database. But randomly and quite often I get a ClientAbortException and my application crashes. What can I do? Debugging does not help since I cannot reproduce the errors:
- Play version : 1.2.3 and 1.2.4 (on both version the errors occur)
- Machine: Windows Server 2003 and 2008
Stack trace
ERROR ~
@698gd0b9n
Internal Server Error (500)
Oops: ClientAbortException
An unexpected error occured caused by exception ClientAbortException: null
play.exceptions.UnexpectedException: Unexpected Error
at play.Invoker$Invocation.onException(Invoker.java:244)
at play.Invoker$Invocation.run(Invoker.java:286)
at play.server.ServletWrapper$ServletInvocation.run(ServletWrapper.java:548)
at play.Invoker.invokeInThread(Invoker.java:68)
at play.server.ServletWrapper.service(ServletWrapper.java:142)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:879)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:619)
Caused by: ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:370)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:352)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:396)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:385)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:83)
at play.server.ServletWrapper.copyResponse(ServletWrapper.java:493)
at play.server.ServletWrapper$ServletInvocation.execute(ServletWrapper.java:558)
at play.Invoker$Invocation.run(Invoker.java:278)
... 18 more
Caused by: java.net.SocketException: Connection reset by peer: 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.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:751)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:347)
at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:774)
at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:118)
at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:584)
at org.apache.coyote.Response.doWrite(Response.java:560)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:365)
... 26 more
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我有类似的问题,但使用 Play-1.2.3 / Tomcat 6 / H2 数据库。
我从来没有真正理解问题的根源,但通过修改我们的部署过程并确保在替换 war 文件之前 Tomcat 完全停止来解决了这个问题。
在第一次重新启动 Tomcat 之前,我还必须删除所有 Tomcat 临时文件。
这肯定与 Tomcat 尝试热交换 war 文件和 Play 未正确关闭其资源有关,但在找到有效的解决方法后我停止了调查。
我发现框架中没有处理一些异常,这导致错误消息和记录的异常与实际问题无关。
这个答案可能不在stackoverflow标准中(我不确定是否是同一个问题,我只是提交了一个解决方法),但我觉得这个个人经历是相关的。让我知道我是否应该删除它、修改它或其他什么。
I had a similar problem, but using Play-1.2.3 / Tomcat 6 / H2 Database.
I never really understood the source of the problem but it was solved by modifying our deployment process and making sure Tomcat was completely stopped before replacing the war file.
I also had to remove all Tomcat temporary files before relaunching Tomcat the first time.
This must have something to do with Tomcat trying to hot-swap the war file and Play not closing its resources properly, but I stopped investigating after finding a valid workaround.
I found out that some exceptions are not handled in the framework, which led to error messages and logged exception having nothing to do with the actual problem.
This answer may not be in the stackoverflow standards (I'm not sure if it is the same problem and I just submit a workaround), but I felt this personal experience was related. Let me know if I should delete it, modify it or anything.
对于 Play 1.1.1 / Tomcat 7.082 / 无数据库(它是 jersey 2 REST 的提要),
我删除了 Tomcat/temp 和 Tomcat/work/Catalina/localhost 中的所有临时文件。
这为我解决了这个问题。
For Play 1.1.1 / Tomcat 7.082 / No Database (It's feed with jersey 2 REST)
I deleted all temp files in Tomcat/temp and in Tomcat/work/Catalina/localhost.
This solved this issue for me.