2012-10-31 3 views
2

서블릿에 도달하기 위해 스레드를 호출하고 서버의 로그에서 마지막 몇 줄을 검색하고 검색된 로그 행을 클라이언트에 표시하는 Java 클라이언트가 있습니다. 가끔 로그 스레드가 시간 초과됩니다. 응용 프로그램 서버는 Tomcat이지만 Tomcat과 Websphere에서 Windows의 클라이언트와 Windows의 서버를 사용하여 오류가 간헐적으로 재현됩니다. Windows의 클라이언트 및 AIX의 서버에서는이 문제가 지금까지 발생하지 않았습니다. 코드가 꽤 반복적으로 안정적이었고 갑자기 이러한 문제가 발생하기 시작했음을 언급해야합니다.간헐적 인 연결 시간 초과를 진단 하시겠습니까?

내가 그렇게 시도 무엇 클라이언트를 읽는까지

  1. 로그 스레드에게 (잠을 사용) 매 0.1 초를 호출합니다. 코드에서 잠자기 시간을 5 초로 늘려 보았지만 도움이되지 않았습니다.

  2. URLConnection 객체를 만들 때 connectTimeout 및 readTimeout과 같은 속성을 설정합니다. readTimeout은 원인이 될 수 있다고 생각하지 않습니다. 소켓 예외가 발생했기 때문입니다.

3 Tomcat 구성으로 작업을 시도했습니다.

Connector port="9962" protocol="HTTP/1.1" connectionTimeout="200000" redirectPort="8445" acceptCount="30" 

4. 사용 후 url 연결이 "연결 해제"됩니다.

5 스택 추적은 요청이 응용 프로그램 서버에 도달하지 못했음을 암시하는 것으로 보입니다. 연결에 대한 일부 OS 계층 제한 때문일 수 있습니다. 그러나이 경우 Windows의 이벤트 뷰어에 항목이 있었을 것입니다.

java.net.ConnectException: Connection timed out: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(Unknown Source) 
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at sun.net.NetworkClient.doConnect(Unknown Source) 
    at sun.net.www.http.HttpClient.openServer(Unknown Source) 
    at sun.net.www.http.HttpClient.openServer(Unknown Source) 
    at sun.net.www.http.HttpClient.<init>(Unknown Source) 
    at sun.net.www.http.HttpClient.New(Unknown Source) 
    at sun.net.www.http.HttpClient.New(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source) 

이 문제를 어떻게 진단 하시겠습니까? 서버 로그에는 의심스러운 내용이 표시되지 않습니다. 클라이언트와 서버에는 내가 아는 한 다른 네트워킹 장치가 없으므로 프록시가 필요하지 않으며 방화벽이 꺼져 있습니다. 나는 지금까지 살아있는 것을 사용하지 않았다.

+0

연결의 한계에 도달했다고 생각합니다. 'netstat'을 실행하고 어떻게 연결되어 있는지 확인하십시오. – user1516873

+0

주기적으로 인터넷 연결 자체가 실패하지 않는지 확인하십시오. 4.2.2.1을 ping하고 결과를 파일에 기록하는 프로그램을 작성하십시오. 패킷 손실이 발생하고 소프트웨어가 중단 된 시간에 해당하는 경우 결과를 파일에 기록하십시오. 그런 다음 조사를 위해 ISP에 전화하십시오. –

+0

@Eric 이것은 사무실 LAN 내에 있습니다. Ping은 항상 잘 작동했습니다. 나는 아직이 LAN에서 단일 패킷 드롭을 볼 수 있습니다. –

답변

2

어떤 원인인지 예측하기 어렵습니다. 그러나 다음 단계는 클라이언트 및/또는 서버에서 패킷 스니퍼를 실행하여 TCP 연결 요청이 Windows 시스템에 연결되는지 확인하는 것입니다.

Tomcat과 Websphere에서 모두 문제가 발생하면 그 원인은 더 낮은 수준에 있음을 의미합니다. OSes TCP/IP 스택, 방화벽 또는 네트워크에서 실행됩니다. (그리고 서버가 가상에서 실행되고 있다면, 가상 네트워킹이 중단 될 수 있습니다.)

관련 문제