Windows Server 2012 R2에는 임시 포트가 부족하지만


13

우리는 정기적으로 전용 서버의 네트워킹에 이상한 문제를 겪고 있습니다. 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
나는 비슷한 문제가 있었고 다음 링크가 나를 위해 고쳤다 : http://blogs.technet.com/b/kimberj/archive/2012/07/06/sever-quot-hangs-quot-and-ephemeral-port- 피로 -issues.aspx

2
UPDATE 2 정보 : 이것은 단순히 메일 서비스가 연결을 닫지 않고 너무 많은 연결을 생성하고 문제를 해결하지는 않았지만 문제가 해결 될 때까지 숨기고 하루에 두 번 다시 시작해야하는 경우가 있음을 나타냅니다. 문제 ...
Mikhail

답변:


9

거의 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


1
답변하기 전에 질문을 철저히 읽어보아야합니다. 물론 묻기 전에이 솔루션을 사용해 보았습니다. 매우 일반적입니다. 이미 다른 방법으로 문제를 해결했습니다.
CamaroSS

1
메일 서비스를 매일 다시 시작해도 문제가 해결되지 않는다고 생각합니다. 다른 해결책을 찾았습니까?
MyKE

3
@CamaroSS : 솔루션을 공유하십시오 ( "메일 서비스 다시 시작"을 넘어서는 경우 솔루션이 아닙니다 ). 또한 누군가 당신을 도와 주려고하면 조금 더 감사해야 할 것입니다.
Sven

@CamaroSS 그리고 내 대답을주의 깊게 읽으면 "귀하와 같은 결과가
나옵니다

1
MaxUserPort2012 년에도 설정이 계속 작동 합니까 ? 2012 년에는 netsh를 통해해야한다고 생각했습니다. 예 :netsh int ipv4 set dynamicport tcp start=25535 num=40000
rustyx

4

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 )도 기본값 입니다.


이 문제에 대해 정말 감사합니다. 이미 문제를 해결하는 데 몇 시간을 보냈습니다. 내가 찾을 수있는 모든 조언은 레지스트리에서 MaxUserPort를 조정하는 것에 관한 것이며 아무도 netsh를 언급하지 않았습니다.
milosz

3

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 ()


1

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


많은 PHP 사이트이며, 대부분 지속적인 연결을 사용하는 FastCGI를 통해 실행되므로 그렇지 않습니다. 그렇다면 시스템 카운터는 더 높은 값을 반환합니다. 또한 localhost가 갑자기 :: 1로 해석을 중지하고 대신 127.0.0.1로 해석되는 이유를 설명 할 수 없습니다.
CamaroSS

2
:: 1 사라지는 것은 허용되는 포트를 오버플로하는 것의 부작용 일 것입니다 .Windows는 IPv6 핑을 시도하고 포트를 시도 할 수 없으면 IPv4로 넘어갑니다. PHP는 제 전문 분야를 벗어납니다. :-(. 행운을 빌어 요!
James
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.