2008-10-15 3 views
3

클라이언트와 서버 간의 TCP 연결을 사용하는 업무용 실시간 데이터 응용 프로그램이 있습니다. 경우에 따라 연결이 주기적으로 종료됩니다 (SocketException). 문제 없습니다. 다시 연결하고 계속 진행하십시오. 그러나 고객은 이러한 간헐적 인 연결 끊김에 흥분하지 않습니다..NET의 TCP 연결 품질

손가락을 가르키는 부분을 알고 싶습니다. 클라이언트 또는 서버입니까? 하드웨어 또는 소프트웨어? 이더넷 링크에 관한 것입니까? 최종 결과는 사용자에게 연결 상태 표시기를 보여 주므로 잘못된 링크를 조사하고 해결할 수 있습니다.

TcpClient, 소켓 또는 연결 상태에 대해 알려주는 다른 측정 항목이 있습니까? 아마도 평균 시간, 재시도 횟수 등은 무엇입니까?

나는 전체적으로 이더넷 연결뿐만 아니라 TCP 연결에 대해서도 알고 싶다. (LAN 연결은 멋지지만 외부 서버에는 문제가있을 수있다.)

물론 원격 호스트에 ping 할 수는 있지만 실제로 찾고있는 통계 종류가 아닐 것이라고 생각합니다. 한 가지 예로, 서버가 NAT 뒤에 숨어 있으면 라우터에 ping을 수행 할 수 있습니다.

답변

1

Perfmon은 친구입니다. 모든 IP, TCP 및 네트워킹 카운터에 대한 로그를 실행하십시오. 연결이 끊어 졌음을 알 수 있으면 그래프를보고 네트워크 오류, 전송 없음, 전송 된 IO 바이트 없음 등을 확인할 수 있습니다.

GC, 메모리와 같은 일부 .NET 카운터도 추가하십시오. CPU 사용량.

마지막으로 할 수있는 일은 TCP 시간 초과 및 기타 설정을 늘리는 것입니다. 그들은 in the registry

원격 서버에 실제로 문제가있는 경우 양쪽 끝을 모니터링해야하지만 카운터를보고 시작하여 무엇이든 밖으로 나와 있는지 확인해야합니다.

+0

감사합니다. 그러나 저는 애플리케이션 내부의 작은 규모로이를 수행 할 수있는 방법을 찾고 있습니다. 고객이 끊어진 연결이 많다고보고하면 IT 부서에 하루 동안 쫓아달라고 요청할 수는 없습니다 (좋지는 않겠지 만). –

+0

고객과 이야기 할 수 있지만 메모리, 성능 및 네트워킹 문제를 추적하기 위해 지금까지 몇 번 해봤습니다. 네트워크 카드에 종종 문제가 있습니다. 고객과 함께 일하면 대개 따뜻하고 모호한 느낌을줍니다. – gbjbaanb

5

먼저 SocketExceptions의 세부 정보를 검사해야합니다. .NET에 무엇이 들어 있는지 모르지만 Java에서는 자세한 메시지가 "연결이 닫힌 연결"또는 "연결 재설정"과 같은 유용한 힌트를 제공합니다.

내 경험으로 볼 때 소켓 연결이 끊어지는 일반적인 원인은 읽기 제한 시간 예외가 다른 모든 연결 관련 예외와 동일한 catch 절에 의해 처리되어 결국 연결이 닫히는 코드 버그입니다 아무 이유없이.

엔터프라이즈 설정에서 오래 지속되는 TCP 연결이 닫히는 일반적인 원인은 트래픽이없는 TCP 연결을 종료하는 일반적인 방화벽 원인 (예 : 10 분 후) 또는 연결이 만료 된 후 (예 : 30 분) 트래픽과 상관없이 일반적으로 이런 일이 일어나고 정상적으로 연결을 다시 설정할 준비가되어 있다고 가정하는 것이 가장 좋습니다.

좋은 접근 방식은 연결 클로저에 패턴이 있는지 확인하는 것입니다. 예를 들어, 주기적으로 닫혔는지, 활동이없는 특정 시간이 경과했는지 여부. 또한 패킷 스니퍼를 실행하여 연결 종료를 시작하는 쪽과 RST 패킷을 보내는 쪽과 이유를 확인할 수 있습니다.

+0

스니퍼 +1. 이전에 이더 리얼 (Ethereal)로 알려진 스니퍼 인 와이 샤 마크 (Wireshark)는 매우 훌륭합니다. –