【问题标题】:ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error [duplicate]ClientAbortException:java.net.SocketException:对等方重置连接:套接字写入错误[重复]
【发布时间】:2010-10-24 18:28:29
【问题描述】:

我在从数据库列检索文件对象时经常收到以下错误。我该如何解决这个问题?

May 8, 2009 3:18:14 PM org.apache.catalina.core.StandardHostValve status
  WARNING: Exception Processing ErrorPage[errorCode=404, location=/error.jsp]
  ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error
  at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:327)
  at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:293)
  at org.apache.catalina.connector.Response.flushBuffer(Response.java:537)
  at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:286)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
  at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
  at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)        
  at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
  at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
  at java.lang.Thread.run(Unknown Source)

Caused by: java.net.SocketException: Connection reset by peer: socket write error
  at java.net.SocketOutputStream.socketWrite0(Native Method)
  at java.net.SocketOutputStream.socketWrite(Unknown Source)
  at java.net.SocketOutputStream.write(Unknown Source)
  at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:746)
  at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:433)
  at org.apache.coyote.http11.InternalOutputBuffer.flush(InternalOutputBuffer.java:304)
  at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:991)
  at org.apache.coyote.Response.action(Response.java:182)
  at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:322)
  ... 13 more

【问题讨论】:

  • 您是否真的看到了实际问题,或者您只是在日志记录中收到这些消息?
  • 这个问题是关于 servlet 的异常。对于客户的类似问题,请参阅stackoverflow.com/questions/34673336/…

标签: java tomcat socketexception connection-reset


【解决方案1】:

您的 HTTP 客户端已断开连接。

这可能有几个原因:

  • 响应请求时间过长,客户端放弃
  • 您回复了客户不理解的内容
  • 最终用户实际上取消了请求
  • 发生网络错误
  • ...可能更多

你可以很容易地模仿这种行为:

URL url = new URL("http://example.com/path/to/the/file");

int numberOfBytesToRead = 200;

byte[] buffer = new byte[numberOfBytesToRead];
int numberOfBytesRead = url.openStream().read(buffer);

【讨论】:

  • IMO,您列表中最有可能的项目是“最终用户实际上取消了请求”。血腥的用户,总是惹麻烦:-P
【解决方案2】:

您的日志显示 ClientAbortException,它发生在您的 HTTP 客户端断开与服务器的连接并且发生在服务器可以关闭服务器套接字连接之前。

【讨论】:

    【解决方案3】:

    我在 Google 缓存 的打开页面上收到此错误。

    我认为,缓存页面(客户端)在页面加载时断开

    您可以通过过滤器上的 try-catch 忽略此错误日志。

    【讨论】:

      【解决方案4】:

      Windows 防火墙可能会导致此异常,请尝试禁用它或为端口甚至程序添加规则(java)

      【讨论】:

      • 如果这是问题所在,Windows 防火墙会完全阻止连接。
      • “预防”以什么方式?很明显,当您的程序尝试打开连接时,您会得到异常(在我看来是 java.net.SocketException),问题是您将看到什么消息......事实上,我用“连接重置”修复了这个问题by peer: socket write error”,通过在 Windows 防火墙中引入新规则。
      • @Yura "Prevent" 因为一开始就不让服务器接受客户端的连接。
      • 防火墙可能会因为不喜欢深度数据包检测结果而切断连接。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      • 2018-08-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多