문제

이 질문에는 이미 답변이 있습니다.

자주 보이지만 간헐적으로 나타납니다. 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)
    

우리 구성 요소는 SMS 메시지를 보내는 타사 웹 서비스를 호출하는 Tomcat에서 실행되는 웹 애플리케이션입니다.예외가 발생하는 코드 줄은 아래 코드 조각의 마지막 줄입니다.

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 );
도움이 되었습니까?

해결책

Pocketexception의 Javadoc은 그 사실을 나타냅니다

TCP 오류와 같은 기본 프로토콜에 오류가 있음을 나타냅니다.

귀하의 경우 연결의 서버 종료에 의해 연결이 닫힌 것으로 보입니다. 이것은 당신이 보내는 요청이나 그들의 마지막에 문제가 될 수 있습니다.

디버깅을 돕기 위해 Wireshark 실제 네트워크 패킷을 볼 수 있습니다. 또한 웹 서비스를 테스트하는 데 사용할 수있는 Java 코드의 대체 클라이언트가 있습니까? 이것이 성공하면 Java 코드의 버그를 나타낼 수 있습니다.

Commons를 사용하면 HTTP 클라이언트가 공통 HTTP 클라이언트 로깅 가이드. 이것은 HTTP 수준에서 요청을 기록하는 방법을 알려줍니다.

다른 팁

이 오류 당신 편에서 일어난다 그리고 다른 쪽이 아닙니다. 상대방이 연결을 재설정하면 예외 메시지가 다음을 말해야합니다.

java.net.SocketException reset by peer

원인은 내부의 연결입니다 HttpClient 부실합니다. SSL에 대한 오래된 연결을 확인하면이 오류가 해결되지 않습니다. 해결책 : 고객을 버리고 재현하십시오.

Glassfish3 서버에 배포 된 웹 서비스에 액세스하려고 시도한 경우 HTTP- 스레드 풀 설정을 조정할 수 있습니다. 많은 동시 스레드가 웹 서비스를 호출했을 때 우리가 가졌던 고정 된 socketexceptions.

  1. 관리자 콘솔로 이동하십시오
  2. "configurations"-> "Server Config"-> "스레드 풀"-> "http-shread-pool"으로 이동하십시오.
  3. "최대 스레드 풀 크기"설정 변경 5 ~ 32
  4. "Min Thread Pool Size"설정 변경 2에서 16까지
  5. 유리 피쉬를 다시 시작하십시오.

나는 또한이 오류를 우연히 발견했다. 제 경우에는 문제가 JRE6을 사용하고 있었고 지원했습니다. TLS1.0. 서버는 TLS1.2 만 지원 하므로이 오류가 발생했습니다.

제 경우에는 내 Tomcat이 불충분 한 상태로 설정 되었기 때문입니다. maxHttpHeaderSize 특히 복잡한 Solr 쿼리의 경우.

이것이 누군가를 도울 수 있기를 바랍니다!

나는 항상이 오류를 얻고 정상적인 것을 고려합니다.

한쪽이 다른 쪽이 이미 끊었을 때 읽으려고 할 때 발생합니다. 따라서 프로토콜에 따라 문제가 발생하거나 지정되지 않을 수 있습니다.. 내 클라이언트 코드가 특별히 서버에 끊어 질 것이라고 표시되면 클라이언트와 서버가 동시에 끊어 질 수 있으며이 메시지는 발생하지 않습니다.

내 코드를 구현하는 방법은 고객이 작별 인사없이 끊는 것입니다. 그런 다음 서버는 오류를 포착하여 무시할 수 있습니다. HTTP의 맥락에서, 나는 한 수준의 프로토콜이 연결 당 하나 이상의 요청을 허용하고 다른 수준은 그렇지 않다고 생각합니다.

따라서 한쪽이 다른쪽에 어떻게 계속 끊을 수 있는지 알 수 있습니다. 나는 당신이받는 오류가 불법적 인 관심사라는 것을 의심하며, 당신은 단순히 로그 파일을 채우지 못하게하기 위해 그것을 잡을 수 있습니다.

이 오류는 클라이언트가 소켓을 통해 응답을 반환하기 전에 소켓 연결을 닫을 때 서버 측에서 발생합니다. 웹 앱 시나리오에서는 수동으로 만들 수 있기 때문에 이들 모두 위험한 것은 아닙니다. 예를 들어, 반응이 검색되기 전에 브라우저를 종료함으로써.

예외는 소켓이 다른 쪽에서 예기치 않게 닫혔다는 것을 의미합니다. 웹 서비스를 호출하기 때문에 이런 일이 일어나지 않아야합니다. 대부분 웹 서비스에서 버그를 트리거하는 요청을 보내는 것 같습니다.

이 경우 전체 요청을 기록하고 비정상적인 것을 발견했는지 확인하십시오. 그렇지 않으면 웹 서비스 제공 업체와 연락하여 기록 된 문제를 보냅니다.

나는이 스레드가 조금 늙었다는 것을 알고 있지만 2 센트를 추가하고 싶습니다. 릴리스 직후에 동일한 "연결 재설정"오류가있었습니다.

근본 원인은 우리였습니다 apache 배포를 위해 서버가 다운되었습니다. 우리의 모든 타사 트래픽은 계속됩니다 apache 그리고 우리는 연결 재설정 오류가 줄어들었기 때문에 연결 재설정 오류가 발생했습니다.

이것은 오래된 실이지만 나는 java.net.SocketException: Connection reset 어제.

서버 측 애플리케이션에는 한 번에 1 개의 연결 만 허용하도록 조절 설정이 변경되었습니다! 따라서 때로는 전화가 통과되었고 때로는 그렇지 않았습니다. 스로틀링 설정을 변경하여 문제를 해결했습니다.

나도 정확히 그 오류를 얻었습니다. Connection reset by peer.Spring의 REST 템플릿을 실행할 때 예외가 발생했습니다. postForObject() 방법.나에게 문제는 너무 긴 HTTP URL 요청이었습니다.따라서 먼저 생성된 URL이 원래대로인지 확인하고 서버가 실제로 해당 길이의 요청을 처리할 수 있어야 하는 경우 서버 구성으로 이동하여 기본 허용 URL 요청 길이를 늘리면 됩니다.

그것은 나를 위해 문제를 해결했지만 다음 사항에 유의하십시오.URL 요청의 최대 길이가 고정되어 있기 때문에 일부 인터넷 브라우저, 특히 오래된 브라우저에서는 애플리케이션이 실행되지 않을 수 있습니다.

도움이 되길 바랍니다...

읽은 텍스트 파일에 방화벽에 안티 바이러스 서명과 일치하는 문자열이 포함되어있을 때이 오류가 발생했습니다.

fwiw, 나는 우연히 사후 요청을 기대하는 엔드 포인트에 대한 요청을 할 때이 오류를 얻고 있었다. 아마도 그것은 문제를 처리하는 특정 서버 방법 일뿐입니다.

연결하려고 시도한 포트가 닫히기 때문에이 오류가 발생했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top