Pergunta

Esta questão já tem uma resposta aqui:

Estamos vendo erros java.net.SocketException: Connection reset frequentes mas intermitentes em nossos registros. Nós não tiver certeza quanto ao local onde o erro Connection reset é realmente vindo, e como ir sobre depuração.

O problema parece estar relacionado com as mensagens que estão tentando enviar. Note-se que a mensagem é não connection reset by peer.

Todas as sugestões sobre quais são as causas típicas deste exceção pode ser, e como podemos proceder?

Aqui está um rastreamento de pilha representante (com.companyname.mtix.sms é nosso componente):

    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)
    

Nosso componente é uma aplicação web, que funciona sob Tomcat, que chama um terceiro serviço Web partido que envia mensagens SMS, acontece. A linha de nosso código no qual a exceção é jogado a partir de é a última linha no trecho de código a seguir.

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 );
Foi útil?

Solução

O javadoc para SocketException afirma que é

Lançada para indicar que há um erro no protocolo subjacente, como um erro de TCP

No seu caso parece que a conexão foi fechada até o final servidor da conexão. Este poderia ser um problema com o pedido de que você está enviando ou um problema em sua extremidade.

Para ajudar a depuração você pode olhar para usar uma ferramenta como Wireshark para visualizar os pacotes de rede reais. Além disso, existe um cliente alternativo ao seu código Java que você poderia usar para testar o serviço web? Se esta foi bem sucedida que poderia indicar um bug no código Java.

Como você está usando Commons HTTP cliente ter um olhar para o Logging Comum cliente HTTP Guia . Isto irá dizer-lhe como registrar o pedido no nível HTTP.

Outras dicas

Este erro acontece ao seu lado e não com o outro lado. Se o outro lado redefinir a conexão, em seguida, a mensagem de exceção deve dizer:

java.net.SocketException reset by peer

A causa é a conexão dentro HttpClient é obsoleto. Verifique a conexão obsoleto para SSL não corrigir este erro. Solução:. Despejar seu cliente e recriar

Se você tiver esse tentando serviços Web de acesso implantados em um servidor Glassfish3, você pode querer ajustar suas configurações http-thread-pool. Que SocketExceptions fixos tivemos quando muitos threads simultâneos foi chamar o serviço web.

  1. Vá para console de administração
  2. Navegue até "Configurações" -> "config do servidor" -> "Thread pools" -.> "Http-thread-pool"
  3. Alterar configuração "Max Tópico Pool Size" 5-32
  4. Alterar configuração "Min Tópico Pool Size" 2-16
  5. Restart Glassfish.

Eu também queria tropeçar este erro. No meu caso o problema era que eu estava usando jre6, com suporte para TLS1.0 . O servidor só TLS1.2 suportado, de modo que este erro foi lançada.

No meu caso, isso foi porque o meu Tomcat foi definido com um maxHttpHeaderSize insuficiente para uma consulta SOLR particularmente complicado.

Espero que isso ajude alguém lá fora!

Eu recebo este erro o tempo todo e considerá-lo normal.

Isso acontece quando um lado tenta ler quando o outro lado já desligou. Assim dependendo do protocolo pode ou não pode designar um problema . Se o meu código de cliente indica especificamente para o servidor que ele está indo para desligar, em seguida, ambos cliente e servidor pode pendurar-se ao mesmo tempo e esta mensagem não aconteceria.

A forma como eu implementar meu código é para o cliente apenas para pendurar-se sem dizer adeus. O servidor pode então pegar o erro e ignorá-lo. No contexto do HTTP, eu acredito que um nível do protocolo permite que mais de uma solicitação por conexão enquanto o outro não.

Assim você pode ver como potencialmente um dos lados poderia manter pendurado em cima da outra. Eu duvido que o erro está a receber é de qualquer preocupação de pirata e você pode simplesmente pegá-lo para mantê-lo de encher seus arquivos de log.

Este erro ocorre no lado do servidor quando o cliente fechou a conexão de soquete antes que a resposta poderia ser devolvido sobre o soquete. Em um cenário de aplicativo web nem todos estes são perigosos, uma vez que pode ser criado manualmente. Por exemplo, ao sair do navegador antes da reponse foi recuperado.

Os meios excepção de que a tomada foi fechada inesperadamente a partir do outro lado. Desde que você está chamando um serviço de web, isso não deve acontecer - o mais provável que você está enviando um pedido que desencadeia um erro no serviço Web.

Tente fazer login o pedido na totalidade, nesses casos, e veja se você perceber algo incomum. Caso contrário, entre em contato com o provedor de serviços web e enviar-lhes o seu pedido problemático registado.

Eu sei que esta discussão é pouco velho, mas gostaria de adicionar meus 2 centavos. Tivemos o mesmo "redefinição de conexão" direito de erro após a nossa um dos lançamentos.

A causa foi, o nosso servidor apache foi derrubado para implantação. Todos nosso tráfego terceiros passa por apache e estávamos recebendo erro redefinição de conexão por causa de ser para baixo.

Esta é uma discussão antiga, mas eu corri para java.net.SocketException: Connection reset ontem.

A aplicação do lado do servidor teve suas configurações de otimização alterada para permitir que apenas 1 ligação de cada vez! Assim, às vezes chamadas passou e às vezes não. Eu resolvi o problema alterando as configurações de otimização.

Eu estava recebendo exatamente o que o erro também: Connection reset by peer. A excepção foi a ser levantado pelo modelo de descanso de mola sobre a execução do método postForObject(). Para mim, o problema era muito longo pedido de URL HTTP. Então, primeiro cheque se o URL produzido é o que deveria ser e, se o servidor realmente deve ser capaz de lidar com os pedidos de que o comprimento, simplesmente ir para a configuração do servidor e elevar o padrão de comprimento permitido de solicitações de URL.

Isso resolveu o problema para mim, mas estar ciente: a aplicação pode não funcionar em alguns navegadores de internet, especialmente as antigas, como eles fixaram comprimento máximo de solicitações de URL

.

Hope isso ajuda ...

Eu tenho esse erro quando o arquivo de texto que eu estava tentando ler continha uma cadeia que combinava uma assinatura de antivírus em nosso firewall.

FWIW, eu estava recebendo este erro quando eu estava acidentalmente fazendo uma solicitação GET para um desfecho que esperava um pedido POST. Presumivelmente, isso foi apenas que determinados servidores maneira de lidar com o problema.

Eu estava recebendo este erro porque a porta Eu tentei conectar a foi fechada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top