2014-11-06
클라이언트 서버에 접속을 하게 되면, mysql에서는 해당 사용자에 대한 접속을 유지하는 time_wait가 발생한다.
그런데 이 time_wait가 보통 90초(윈도우기준)로 설정되어 있기 때문에, 해당 포트에 대한 접속이 이미 끊긴 상태에서도 90초 동안은 해당 포트가 점유 되어 있게 된다.
그래서 순간 동시사용자가 많은 경우에는 time_wait의 대기시간을 줄여줘야 할 필요가 생긴다.

윈도우의 경우에는 레지스트편집기에서 아래의 두 값을 설정해 주면된다.
그리고 수정 뒤에 재부팅을 해야 값이 적용 된다.
위치 : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
값 : MaxUserPort
데이터 타입 : REG_DWORD
추천값 : 65534
 
위치 : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
값 : TcpTimedWaitDelay
데이터 타입 : REG_DWORD
범위 : 30 to 300
추천값 : 30
다만, 서버2008이나 윈도우7일 경우에는 해당 위치에 가도 해당 값이 없기 때문에 새로 만들어서 추가해야 될 것이다.

참조 : http://dev.mysql.com/doc/refman/5.1/en/can-not-connect-to-server.html

리눅스
위치 : /proc/sys/net/ipv4/tcp_fin_timeout
기본값 : 60
추천값 : 30
설정 : echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
기능 : time_wait의 대기값을 설정한다.

위치 : /proc/sys/net/ipv4/tcp_rfc1337
미사용 : 0
사용 : 1 
설정 : echo 1 > /proc/sys/net/ipv4/tcp_rfc1337
기능 : time_wait로 되는 즉시 소켓을 종료 시킨다.

위치 : /proc/sys/net/ipv4/tcp_tw_recycle 
미사용 : 0
사용 : 1 
설정 : echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle 
기능 : time_wait의 소켓의 재활용을 허락한다.
 
위치 : /proc/sys/net/ipv4/tcp_tw_reuse 
미사용 : 0
사용 : 1 
설정 : echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
기능 : time_wait의 소켓의 재사용한다
해당 설정들은 적용시키려면 service network restart로 network를 재시작 해주어야 한다.

그리고 서버를 재부팅 하고도 해당 설정들이 적용 되도록 하려면,
/etc/sysctl.conf 파일을 열고
net.ipv4.tcp_fin_timeout = 30 net.ipv4.ip_local_port_range = 1024 65535
로 추가해 놓아야 한다.
(재시작없이 해당 설정을 불러오려면 sysctl -p를 하면 된다. )

하지만 위 설정들이 제대로 적용이 안될 수도 있다는 점은 알아 둬야 할 것이다.
특히 윈도우 설정은 되다 말다 하기도 하고.....ㅡ/.ㅡ