본문 바로가기

IT

최대 접속자수를 늘리기 위한 윈도우 설정

반응형

 윈도우를 기반으로 한 서버를 작업하면서 수많은 Connection의 연결, 끊기가 반복되는 와중에 TIME_WAIT 된 연결이 점점 증가하여 DDOS 를 당한 것처럼 클라이언트들과의 Connection을 더이상 연결하지 못하는 일이 발생하는 일이 생겼습니다.


 레지스트리 수정을 하여 2가지를 추가하였습니다.


 이미지부터 봅니다.

 

<클릭하면 크게 볼 수 있음>


 레지스트리 에디터를 작동시키고 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters' 까지 이동합니다.


 위의 이미지에 보이는 2가지 항목이 없는 분도 계실 것이고 있는 분도 계실겁니다.


 1. MaxUserPort

 - 32비트 DWORD값으로 최대 65534 (10진수)까지 입력할 수 있습니다. 소켓통신당 포트를 1개를 사용하므로 최대 65534개의 연결을 만들 수 있습니다. Default값으로 지정된 값은 마이크로소프트 테크넷 에 의하면 5000개로 되어 있다고 합니다.


 2. TcpTimedWaitDelay

 - 32비트 DWORD값으로 최소 30 ~ 최대 300 (10진수)까지 입력할 수 있습니다. 이 값은 TIME_WAIT상태의 연결에 대하여 종료신호가 없는 경우 지정한 시간(초단위)이 지나면 자동으로 연결을 해제하여 포트를 회수합니다. 마이크로소프트 테크넷 에 의하면 Default로 지정된 값은 240(10진수), 0xF0(16진수) 초 입니다. (4분입니다.)

 - 빠른 회수가 우선이고 TIME_WAIT 상태에 빠진 연결은 단순히 종료에 대하여 대기상태에 빠진 것이므로 회수에 대하여 별다른 문제가 없습니다.


 일단 위 2가지 방법으로 간단히 해결할 수 있을 수 있습니다. 이런 것보다 빠른 처리가 필요하다면 최대한 TIME_WAIT에 빠지는 연결이 없도록 프로그래밍 자체를 변경하는 것이 우선입니다.


 저의 경우 위의 설정이외에 웹서버와 DB간의 Connection을 DBConnectionPool을 사용하는 것으로 DB와 웹서버와의 Connection수를 최소화하였으며, 웹서버와 클라이언트간의 접속은 애초에 발생하지 않아서 염두하지 않았습니다.


 주의!! 수정 이후 리부팅하여야 적용됩니다.


참고자료 : KLDP, 마이크로소프트, 오라클


 가장 문제가 되는 부분은 DriverManager.getConnection(); 이후 Connection.close()를 해도 유지되는 경우가 가장 문제가 되었습니다. 끝.

반응형