Windows Server 2012 R2에는 임시 포트가 부족하지만 때문에 실패했습니다.” 내가 달리면 Get-Counter

우리는 정기적으로 전용 서버의 네트워킹에 이상한 문제를 겪고 있습니다. 16GB RAM 및 Intel 82575EB 네트워크 어댑터가있는 Xeon E5620에서 Windows Server 2012 R2 x64를 실행합니다.

우리가 이미 조정 한 점에 유의하시기 바랍니다 HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters키 값을 TcpTimedWaitDelay하고 MaxUserPort30 65530로 각각.

임의의 시점에서 웹 사이트가 응답을 멈춰 로컬 데이터베이스에 연결할 수 없기 때문입니다. 이 문제가 발생하기 시작하는 데 약 2 주가 소요됩니다. 시스템 로그에 TCPIP 경고 4227 및 4231이 표시되기 시작합니다. “글로벌 TCP 포트 공간에서 임시 포트 번호 할당 요청이 모든 포트가 사용 중이기 때문에 실패했습니다.”

내가 달리면

Get-Counter -Counter \TCPv4\*

또는

Get-Counter -Counter \TCPv6\*

또는

netstat -abn | find /c ":"

나는 항상 500-1500 연결의 합리적인 가치를 얻습니다. 65K 한도에 가깝지 않습니다.

또한 “localhost”는 로컬로 :: 1 로의 분석을 중지하고 127.0.0.1로 되돌아갑니다
. 강제 시스템 재시작만으로 상황을 해결할 수 있습니다.

네트워크 어댑터 문제 일 수 있습니까?

업데이트 1

다시 발생하여 메일 서버를 다시 시작할 때 해결 된 것 같습니다. 그러나 모든 카운터는 현재 ~ 500이 활성화 된 상태에서 ~ 1000 개의 연결을 표시했으며 메일 서버와 관련이없는 데이터베이스에 연결하려고 할 때 여전히 10055 소켓 오류가 발생했습니다.

업데이트 2
이것은 이상하지만 메일 서비스를 매일 다시 시작하면 문제가 완전히 해결됩니다.



답변

거의 1 개월 동안 WinSvr 2012R2 x64에서 TCP / IP 포트 풀 풀링과 비슷한 문제가 발생하여 서버에서 새로운 TCP 연결 수신을 중단했습니다. 그래서 레지스트리 값을 가지고 놀았으며 이것들은 안정적입니다.

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
"MaxUserPort"=dword:0000fffe
"TcpNumConnections"=dword:00fffffe
"TcpMaxDataRetransmissions"=dword:00000005
  • TcpTimedWaitDelay -30
  • MaxUserPort -65534
  • TcpNumConnections- 서버가 임시 포트를 모두 사용하지 못하게하려면 기본 상태가 최대 = 16777214로 확장되어 있어야합니다.
  • TcpMaxDataRetransmissions- 실제 연결에서 TCP 미확인 데이터 세그먼트 재전송의 시간 초과 한계 = 5

결과적으로 당신과 동일합니다. 응용 프로그램 / 스크립트 성능의 동작을 감사해야한다고 생각합니다. 모든 것이 정상이고 도움이되지 않으면 웹 응용 프로그램 서버 앞에 프록시 서버를 배치하고 동일한 정적 내용을 공유하고 동일한 데이터베이스에 동일한 데이터베이스에 액세스하는 웹 서버 (IIS, Apache 등)로 2 개의 노드를 만들 수 있습니다 시간 (회사에 충분한 자원이있는 경우).

어쩌면이 기사는 어떤 방식 으로든 도움이 될 것입니다 : http://blogs.technet.com/b/tristank/archive/2008/03/11/maxuserport-what-it-is-what-it-does-when-it- s-important.aspx


답변

Tcpip 드라이버 설정 외에도 임시 TCP 포트 범위는 netsh 명령 ( source )을 사용하여 Windows Server에서 관리됩니다 .

다음 명령으로 동적 포트 범위를 수 있습니다 .

  • netsh int ipv4 show dynamicport tcp
  • netsh int ipv4 show dynamicport udp
  • netsh int ipv6 show dynamicport tcp
  • netsh int ipv6 show dynamicport udp

포트 범위 를 변경 하려면 다음 명령을 사용하십시오.

  • netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range

예를 들면 다음과 같습니다.

netsh int ipv4 set dynamicport tcp start=49152 num=16384

Windows Server 2008 이후 의 설정 (start = 49152 num = 16384 )도 기본값 입니다.


답변

chromewebdriver를 사용하여 대량의 Selenium 테스트를 실행 하는 Windows Server 2016 에서 이와 동일한 문제가 발생했습니다 . 이 PS 스크립트는 위에서 공유 한 @Myke 설정을 자동으로 구성합니다. shutdown재부팅이 TCP 스택 변경 필요하기 때문에 명령이 추가되었습니다.

임시 TCP 포트의 풀 크기 늘리기

Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name MaxUserPort -Value 65534 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpTimedWaitDelay -Value 30 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpNumConnections -Value 16777214 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpMaxDataRetransmissions -Value 5 -Force | Out-Null

shutdown -r -t 0

Webdriver.Quit()TCP 주소가 사용 중임 을 알리는 오류 메시지 입니다.

오류 : EADDRINUSE가 ClientRequest에서 EADDRINUSE 127.0.0.1:12843을 연결합니다. (\ node_modules \ selenium-webdriver \ http \ index.js : 238 : 15)
시작 : 작업 : WebDriver.quit ()


답변

데이터베이스 연결 개체가 유출되지 않았는지 확인 했습니까? 명시 적으로 (시도 적으로) 또는 using {} 블록으로 열린 모든 데이터베이스 연결을 닫아야합니다. 이것은 ASP가 직접 알려주지 않는 일반적인 문제입니다.


답변