0

我有一个托管在 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
4

2 回答 2

2

我有类似的问题,但使用 Play-1.2.3 / Tomcat 6 / H2 数据库。
我从来没有真正理解问题的根源,但通过修改我们的部署过程并确保在替换 war 文件之前完全停止 Tomcat 来解决它。
在第一次重新启动 Tomcat 之前,我还必须删除所有 Tomcat 临时文件。

这一定与Tomcat试图热交换war文件并且Play没有正确关闭其资源有关,但是在找到有效的解决方法后我停止了调查。
我发现框架中没有处理一些异常,这导致错误消息和记录的异常与实际问题无关。

这个答案可能不在stackoverflow标准中(我不确定它是否是同一个问题,我只是提交了一个解决方法),但我觉得这个个人经历是相关的。让我知道我是否应该删除它,修改它或任何东西。

于 2012-05-22T10:08:53.067 回答
0

适用于 Play 1.1.1 / Tomcat 7.082 / 无数据库(使用 jersey 2 REST 提供)

我删除了 Tomcat/temp 和 Tomcat/work/Catalina/localhost 中的所有临时文件。

这为我解决了这个问题。

于 2018-08-30T10:39:03.050 回答