代码之家  ›  专栏  ›  技术社区  ›  Richard Ev

是什么导致了我的java.net。SocketException:连接重置?[副本]

  •  155
  • Richard Ev  · 技术社区  · 16 年前

    我们看到频繁但间歇性的 java.net.SocketException: Connection reset 我们日志中的错误。我们不确定在哪里 Connection reset

    请注意,消息是 connection reset by peer .

    关于这种异常的典型原因是什么,以及我们如何处理,有什么建议吗?

    这是一个具有代表性的堆栈跟踪( com.companyname.mtix.sms 是我们的组件):

        java.net.SocketException: Connection reset
            at java.net.SocketInputStream.read(SocketInputStream.java:168)
            at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
            at java.io.BufferedInputStream.read(BufferedInputStream.java:235)
            at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:77)
            at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105)
            at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1115)
            at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1832)
            at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1590)
            at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:995)
            at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:397)
            at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
            at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
            at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
            at com.companyname.mtix.sms.services.impl.message.SendTextMessage.sendTextMessage(SendTextMessage.java:127)
            at com.companyname.mtix.sms.services.MessageServiceImpl.sendTextMessage(MessageServiceImpl.java:125)
            at com.companyname.mtix.sms.services.remote.MessageServiceRemoteImpl.sendTextMessage(MessageServiceRemoteImpl.java:43)
            at sun.reflect.GeneratedMethodAccessor203.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:585)
            at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
            at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
            at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
            at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
            at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
            at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
            at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453)
            at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
            at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
            at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
            at com.companyname.mtix.sms.http.filters.NoCacheFilter.doFilter(NoCacheFilter.java:63)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
            at com.companyname.mtix.sms.http.filters.MessageFilter.doFilter(MessageFilter.java:53)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
            at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:61)
            at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
            at org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:46)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
            at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
            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(Thread.java:595)
        

    我们的组件是一个在Tomcat下运行的web应用程序,它调用发送SMS消息的第三方web服务。引发异常的代码行是下面代码片段中的最后一行。

    String aggregatorResponse = null;
    HttpClient httpClient = prepareHttpClient( username, password );
    PostMethod postMethod = preparePostMethod( textUrl );
    
    try {
      SybaseTextMessageBuilder builder = new SybaseTextMessageBuilder();
      URL notifyUrl = buildNotificationUrl( textMessage, codeSetManager );
      String smsRequestDocument = builder.buildTextMessage( textMessage, notifyUrl );
      LOG.debug( "Sybase MT document created as: \n" + smsRequestDocument );
    
      postMethod.setRequestEntity( new StringRequestEntity( smsRequestDocument ) );
      LOG.debug( "commiting SMS to aggregator: " + textMessage.toString() );
      int httpStatus = httpClient.executeMethod( postMethod );
    
    14 回复  |  直到 6 年前
        1
  •  61
  •   Mark    16 年前

    抛出表示底层协议中存在错误,如TCP错误

    在您的情况下,连接似乎已被连接的服务器端关闭。这可能是您发送的请求的问题,也可能是请求端的问题。

    为了帮助调试,您可以考虑使用以下工具 Wireshark 查看实际的网络数据包。此外,您是否可以使用Java代码的替代客户端来测试web服务?如果成功,则可能表示Java代码中存在错误。

    Common HTTP Client Logging Guide

        2
  •  36
  •   Nathan    8 年前

    此错误

    java.net.SocketException reset by peer
    

    HttpClient 是陈旧的。检查SSL的过时连接并不能修复此错误。解决方案:丢弃客户端并重新创建。

        3
  •  16
  •   PålOliver    14 年前

    1. 转到管理控制台
    2. 导航到“配置”->“服务器配置”->“线程池”->“http线程池”。
    3. 将“最小线程池大小”设置从2更改为16
        4
  •  9
  •   Community Mohan Dere    8 年前

    我也偶然发现了这个错误。在我的情况下,问题是我使用的是JRE6,支持 TLS1.0 服务器仅支持TLS1.2,因此引发了此错误。

        5
  •  7
  •   inanutshellus user6579257    12 年前

    在我的情况下,这是因为我的Tomcat设置了不足的 maxHttpHeaderSize 对于特别复杂的SOLR查询。

        6
  •  5
  •   Mark rajnik faldu    12 年前

    当客户端在通过套接字返回响应之前关闭套接字连接时,服务器端会发生此错误。在web应用程序场景中,并非所有这些都是危险的,因为它们可以手动创建。例如,在检索响应之前退出浏览器。

        7
  •  4
  •   Paul    16 年前

    当一方试图阅读而另一方已经挂断电话时,就会发生这种情况。因此 根据协议,这可能表示也可能不表示问题 .

    然后,服务器可以捕获错误并忽略它。在HTTP的上下文中,我认为协议的一个级别允许每个连接有多个请求,而另一个级别则不允许。

        8
  •  3
  •   Michael Borgwardt    16 年前

    这是一条旧线,但我碰到了 java.net.SocketException: Connection reset 昨天。

        9
  •  1
  •   Richard Ev    9 年前

    异常意味着插座从另一侧意外关闭。由于您正在调用web服务,因此不应该发生这种情况——很可能您发送的请求会触发web服务中的错误。

        10
  •  1
  •   Super Jade    7 年前

    我知道这条线有点旧,但我想加上我的2美分。 在我们的一个版本发布后,我们也出现了同样的“连接重置”错误。

    根本原因是,我们 apache 服务器已关闭以进行部署。我们所有的第三方流量都通过 阿帕奇 由于连接中断,我们遇到了连接重置错误。

        11
  •  1
  •   Displee    7 年前

        12
  •  0
  •   Noumenon    8 年前

    FWW,当我意外地向一个期待POST请求的端点发出GET请求时,我遇到了这个错误。大概这只是服务器处理问题的特定方式。

        13
  •  0
  •   RTF    7 年前

    我也得到了这个错误: Connection reset by peer postForObject()

    希望它能有所帮助。..

        14
  •  -1
  •   bluish dmajkic    13 年前

        15
  •  -6
  •   Ataur Rahman Munna    9 年前
    推荐文章