windows)how to reduce of time_wait

after “regedit” and find key as below

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

and make key as DWORD, name is “TcpTimeWaitDelay” and value is 30 ( recommend )

 

and additional information as below…

 

http://sangchul.kr/4857329

====== 윈도우에서 TCP 파라미터 튜닝 ======

 

결국 윈도우에서 TCP 연결의 개수를 최대한 늘이기 위한 방법은 TcpTimedWaitDelay, MaxUserPort, MaxFreeTcbs, MaxHashTableSize 파라미터를 늘여주는 것이다.

 

Windows에서 TcpTimedWaitDelay를 설정

TCP 파라미터는 물론 플랫폼 별로 많은 파라미터가 존재하지만, Windows에서의 TcpTimedWaitDelay 와 Solaris의 tcp_time_wait_interval 은 동일한

파라미터로서, 커넥션이 종료 되었을 때 TIME_WAIT 상태로 머물게 되는 시간을 설정한다.

이 값의 디폴트는 4분으로 짧은 시간에 많은 클라이언트가 접속을 하면 네트웍(Network) 퍼포먼스에 영향을 줄 수 있기 때문에 60초로 제한을 두도록

권고한다.

 

레지스트리 위치 : HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTcpipParameters
유효한 범위 : 030~300초
값 이름 : TcpTimedWaitDelay
값 종류: DWORD
기본값: 240초
추천 값: 60

 

MaxUserPort

서버에 연결되는 Port의 숫자가 5000개 이상 (Exchange 60000) 될 경우 서버에서 네트워크 장애가 발생될 수 있음.
일반적으로 WAS와 연결되는 Windows 서버나 Exchange 서버에서 주로 발생됨.

 

레지스트리 위치: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
유효한 범위: 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_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

유효한 범위: 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_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

유효한 범위: 64 ~ 65536

값 이름 : MaxHashTableSize
값 종류: DWORD

기본값: 512

추천 값: 2048

 

 

KeepAliveTime

TCP-HandShake를 통해 연결이 되면 해당 세션은 연결이 유지되어집니다.

하지만, 일정 시간동안 Connection에 대해 실제 통신이 없는 경우 Session관리를 위해

특정 시간이 지나면 해당 Session을 OS에서 끊게 됩니다.

 

NT에서 해당 역활을 해주는 것은 KeepAliveInterval에 설정되어진 값에 의해 결정되게 됩니다.

KeepAliveTime을 통해 해당 시간만큼 ACK(응답)이 없는 경우 Session이 종료되어집니다.

 

 

레지스트리 위치: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters

유효한 범위: 0x1–0xFFFFFFFF ms

값 이름 : KeepAliveTime
값 종류: DWORD

기본값: 7,200,000 ms –> 2hr

추천 값: 1800000 ms –>30분

 

 

참고:

윈도우에서 TCP/IP 파라미터

http://technet.microsoft.com/en-us/library/cc739819(WS.10).aspx

 

TCP 동시 연결 수를 최대한 늘이기위한 파라미터

http://lishiqiang2003.wordpress.com/2010/12/24/configure-the-max-limit-for-concurrent-tcp-connections/

 

 

and…informations for  other os

 

For AIX:
To see the current TCP_TIMEWAIT value, run the following command:
/usr/sbin/no | grep tcp_timewait

To set the TCP_TIMEWAIT values to 15 seconds, run the following command:
/usr/sbin/no tcp_timewait =1

The tcp_timewait option is used to configure how long connections are kept in the timewait state. It is given in 15-second intervals, and the default is 1.

For Linux:
Set the timeout_timewait paramater using the following command:
/sbin/sysctl -w net.ipv4.vs.timeout_timewait=30

This will set TME_WAIT for 30 seconds.

For Solaris:
Set the tcp_time_wait_interval to 30000 milliseconds as follows:
/usr/sbin/ndd -set /dev/tcp tcp_time_wait_interval 30000