윈도우 TCP 연결의 개수를 최대한 늘이기
윈도우 서버 환경에서, 최대 생성 가능한 소켓(socket) 연결 수는 얼마일까?
Parameter | Limit |
---|---|
Maximum number of users |
15 (enforced by license terms) |
Required client access licenses (CALs) |
None |
Maximum number of Server Message Block (SMB) connections |
30 |
Maximum number of Routing and Remote Access (RRAS) connections |
50 |
Maximum number of Internet Authentication Service (IAS) connections |
10 |
Maximum number of Remote Desktop Services (RDS) Gateway connections |
50 |
Maximum number of CPU sockets |
1 (no limit on CPU cores) |
Maximum RAM |
32 GB |
Virtual image use rights |
None; cannot host virtual machines or be used as a guest operating system in a virtual machine. |
Domain requirements |
Must be the root domain controller in a domain that has no trusts at the root of the forest. This condition is temporarily allowed for migrations, but if persistent, the system will be forced to restart. |
Windows에서 TcpTimedWaitDelay를 설정
TCP 파라미터는 물론 플랫폼 별로 많은 파라미터가 존재하지만, Windows에서의 TcpTimedWaitDelay 와 Solaris의 tcp_time_wait_interval 은 동일한 파라미터로서, 커넥션이 종료 되었을 때 TIME_WAIT 상태로 머물게 되는 시간을 설정한다. 이 값의 디폴트는 4분으로 짧은 시간에 많은 클라이언트가 접속을 하면 네트웍(Network) 퍼포먼스에 영향을 줄 수 있기 때문에 60초로 제한을 두도록 권고한다.
레지스트리 위치 : HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
유효한 범위 : 0\30~300초
값 이름 : TcpTimedWaitDelay
값 종류: DWORD
기본값: 240초
추천 값: 60
MaxUserPort
서버에 연결되는 Port의 숫자가 5000개 이상 (Exchange 60000) 될 경우 서버에서 네트워크 장애가 발생될 수 있음. 일반적으로 WAS와 연결되는 Windows 서버나 Exchange 서버에서 주로 발생됨.
레지스트리 위치: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
유효한 범위: 5000~65534
값 이름 : MaxUserPort
값 종류: DWORD
기본값: 5000
추천 값: 65534
MaxFreeTcbs
시스템이 TCP 연결 유지를 위해 생성하는 TCP Control Blocks(TCBs)의 숫자를 결정한다. 하나의 연결은 하나의 블록을 요구하기 때문에, 이 값은 TCP가 동시에 몇 개의 연결을 처리할 수 있느냐를 결정하게 된다. 모든 블록이 사용 중인 상황에서 새로운 연결이 들어오게 되면, TCP는 TIME_WAIT 상태인 연결 중에 하나를 강제로 끊어버리고, 블록을 해제한 후, 그 블록을 새로운 연결에 사용하게 된다. 보통 TCP는 TcpTimedWaitDelay에 지정되어 있는 시간이 지나지 않은 경우, 연결을 해제하지도 않고, 그 연결에 사용된 자원을 재사용하지도 않는다. 이 시간은 보통 TIME_WAIT 또는 2MSL (2 x maximum segment lifetime) 상태라고 불린다. 하지만 시스템이 매우 많은 연결을 받아들여 자원이 바닥날 상황에 이르면, TcpTimedWaitDelay에 지정된 시간이 아직 남아있는 경우에도 연결에 할당되어 있는 자원을 해제하게 된다.
레지스트리 위치: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
유효한 범위: 1–0xFFFFFFFF
값 이름 : MaxFreeTcbs
값 종류: DWORD
기본값: 0x1388 (십진값으로 5000)
추천 값: 2000
MaxHashTableSize
TCP Control block이 저장되는 해쉬 테이블의 크기를 결정한다.
TCP는 컨트롤 블록들을 빠르게 검색하기 위해 해쉬 테이블에다 저장한다. 만일 시스템이 동시에 생성할 수 있는 TCB의 숫자를 변경한다면(MaxFreeTcbs 값을 변경한다면), 이 항목의 값 또한 그에 비례해서 변경해줘야한다. 이 항목의 값은 반드시 2의 승수여야한다. 만일 2의 승수를 입력하지 않는다면, 시스템은 자동으로 입력한 수보다 큰 2의 승수 중에 가장 작은 것을 찾아 사용한다. 즉 128 * (시스템 cpu 개수)의 제곱
예를 들어 cpu 4장이라면, 128 * 4^2 = 2048
최대 값은 0x10000 (65,536)입니다. 연결 부하가 클 것으로 예상되는 대규모 서버에서는 최대 값을 설정하는 것이 권장됩니다. 이테이블은 페이지 안 되는 풀을 사용하므로 서버의 가용한 페이지 안 되는 풀이 많지 않거나 연결 부하가 크지 않은 경우에는 이 값을너무 크게 설정하면 안 된다는 사실을 명심하십시오.
레지스트리 위치: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
유효한 범위: 64 ~ 65536
값 이름 : MaxHashTableSize
값 종류: DWORD
기본값: 512
추천 값: 2048
KeepAliveTime
TCP-HandShake를 통해 연결이 되면 해당 세션은 연결이 유지되어집니다. 하지만, 일정 시간동안 Connection에 대해 실제 통신이 없는 경우 Session관리를 위해 특정 시간이 지나면 해당 Session을 OS에서 끊게 됩니다. NT에서 해당 역활을 해주는 것은 KeepAliveInterval에 설정되어진 값에 의해 결정되게 됩니다. KeepAliveTime을 통해 해당 시간만큼 ACK(응답)이 없는 경우 Session이 종료되어집니다.
레지스트리 위치: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
유효한 범위: 0x1–0xFFFFFFFF ms
값 이름 : KeepAliveTime
값 종류: DWORD
기본값: 7,200,000 ms --> 2hr
추천 값: 1800000 ms -->30분