TCP/IP 스택을 프로그래밍 방식으로 죽일 수 있습니까?

StackOverflow https://stackoverflow.com/questions/133442

  •  02-07-2019
  •  | 
  •  

문제

서버 응용 프로그램은 포트에서 듣고 있으며 일정 기간이 지나면 더 이상 들어오는 연결을 수용하지 않습니다. (그리고 나는이 문제를 해결하고 싶지만, 내가 여기서 묻는 것이 아닙니다.)

이상한 점은 앱이 포트 44044의 연결 수용을 중지 할 때 IIS도 포트 8080에도 포함한다는 것입니다. 앱을 죽이면 모든 것이 수정됩니다. IIS는 다시 응답을 시작합니다.

문제는 응용 프로그램이 전체 TCP/IP 스택을 엉망으로 만들 수 있습니까? 아니면 아마도 응용 프로그램은 어떻게 그렇게 할 수 있습니까?

무의미한 세부 사항 : 당사의 앱은 XP/SP2에서 .NET 2.0에 따라 C#로 작성됩니다.

설명 : IIS는 시도 된 연결을 "거부"하지 않습니다. 결코 그들을 보지 못합니다. 클라이언트는 "서버가 적시에 응답하지 않았습니다"메시지를 받고 있습니다 (.NET TCP 클라이언트 사용).

도움이 되었습니까?

해결책

당신은 스택을 굶주리고있을 것입니다. 초대형 요청을 제공하는 Webserver (예 : Webserver)는 높은 오픈/닫기 트랜잭션에서 배수하기가 매우 쉽습니다.

이것은 기본 시간 약탈 지연으로 인해 내려갑니다 - 소켓을 90 년으로 재활용하기 전에 소켓을 닫아야하는 시간 (제가 옳은 경우).

조정할 수있는 레지스트리 키가 많이 있습니다. 최소한 다음 키를 작성/편집 할 것을 제안합니다.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

TcpTimedWaitDelay = 30
MaxUserPort = 65534 
MaxHashTableSize = 65536 
MaxFreeTcbs = 16000 

이 키의 기능에 대한 MSDN & Technet에 대한 많은 문서.

다른 팁

사용 가능한 포트 핸들이 당신에게 최대한 최대한 활용되지 않았습니까?
netstat -a

앱이 포트를 열고 닫을 때 비슷한 것을 보았습니다 (실제로 올바르게 닫지는 않음).

Netstat -a를 사용하여 활성 연결이 발생할 때 활성 연결을 확인하십시오. 아마도 서버 앱이 '닫힌'연결을 닫거나 폐기하지 않을 수 있습니다.

모두의 좋은 제안, 도움을 주셔서 감사합니다.

그래서 여기에 무슨 일이 있었는지 : 우리는 동일한 포트와 경쟁하는 여러 서비스가 있었으며 대부분 "적절한"서비스가 포트를 얻을 것입니다. 때때로 두 번째 서비스는 포트를 제거하고 첫 번째 서비스는 다른 포트를 열려고합니다. 그때부터 서비스는 요청을 서비스 할 때마다 (선호하는 포트를 사용하지 않았기 때문에) 새로운 포트를 계속 잡아야하며 결국 우리는 사용 가능한 모든 포트를 소진 할 것입니다.

물론 실제 질문은 다음과 같습니다. "응용 프로그램이 전체 TCP/IP 스택을 엉망으로 만들 수 있습니까?" 그것을하는 한 가지 방법은 많은 항구에서 듣는 것입니다.

Richs의 포트 번호 주석이 맞습니다.

그 외에도 TCP/IP 스택은 운영 체제의 모듈 일 뿐이므로 응용 프로그램이이를 죽일 수있는 버그를 가질 수 있습니다. 프로그램에 의해 살해 된 첫 번째 운전자는 아닙니다.

(운영 체제가 모 놀리 식 대신 모듈식이되어야한다고 주장하기 위해 Andrew Tanenbaum을 향한 모자에 대한 팁.)

나는 몇 가지 비슷한 상황에 처해있었습니다. 문제 해결 단계는 영향을받는 기계에서 잘 알려진 대상으로 연결을 시도하는 것입니다. 그 순간에는 연결 문제가 발생하지 않습니다. 연결 시도가 실패하면 오류 메시지/코드에서 더 흥미로운 세부 정보를 얻을 수 있습니다. 예를 들어, 핸들이나 메모리가 충분하지 않다고 말할 수 있습니다.

지원과 SYS 관리자 관점에서, 나는 가장 희귀 한 경우 (두 번 이상)에서만 이것을 보았지만 확실히 일어날 수 있습니다.

문제를 진단 할 때는 문제의 첫 징후에서 시스템을 맹목적으로 재부팅하지 않고 가능한 원인을 신중하게 제거해야합니다. 나는 내가 일하는 많은 고객들이 그렇게하고 싶어하기 때문에 이것을 말합니다.

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