是什么导致我的java.nett.ocketException:连接重置?

是什么导致我的java.nett.ocketException:连接重置?

我们看到了频繁但断断续续的情况。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)

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

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 );


三国纷争
浏览 841回答 3
3回答

白衣染霜花

SocketException的javadoc声明它是引发,以指示基础协议中存在错误,例如tcp错误。在您的示例中,连接似乎已被连接的服务器端关闭。这可能是您发送的请求的问题,也可能是其末尾的问题。要帮助调试,可以考虑使用以下工具威雷沙克若要查看实际网络数据包,请执行以下操作。另外,除了您的Java代码之外,还有其他客户端可以用来测试Web服务吗?如果这是成功的,它可能表明在Java代码中的一个错误。在使用CommonsHTTP客户端时,请查看通用HTTP客户端日志指南..这将告诉您如何在HTTP级别记录请求。

蛊毒传说

这个错误发生在你这边而不是另一边。如果另一方重置连接,则异常消息应说明:java.net.SocketException reset by peer原因是内部的连接HttpClient是陈腐的。检查已失效的SSL连接不会修复此错误。解决方案:转储您的客户并重新创建。

HUX布斯

如果您尝试访问部署在Glassfish 3服务器上的Web服务,您可能需要调优http-线程池设置。当许多并发线程调用Web服务时,我们得到了固定的SocketExceptions。转到管理控制台导航到“配置”->“服务器配置”->“线程池”->“HTTP-线程-池”。将“最大线程池大小”从5更改为32将“Min线程池大小”从2更改为16重启玻璃鱼。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java