apache – TIME_WAIT 줄이기
and posted in Apache

1. Apache Keep Alive 옵션 조절
Apache 같은 web server로 운영한다면, KeepAlive Option 을 고려할 수 있습니다.
KeepAlive Option을 On 으로 해놓을 경우 Client를 접속시킨 채로 특별한 요청없이 지속적인 연결을 허용하게 됩니다. 이경우 KeepAliveTimeout 설정으로 연결유지 타임을 설정할 수 있습니다.
(이경우 web server에서 응답시 헤더에 Connection : close 의 정보가 없이 날라가게 됨)

하지만 위의 설정은 약이되고 독이될 수 있어 보입니다.
Client 가 정해져있는 server to server http 연동 I/F 용으로 사용되는 웹서버의 경우 위 설정으로 TIME_WAIT 을 줄이는 효과를 기대할 수 있을거 같습니다.
하지만 web 서비스 를 하는 용도라면 불필요하게 커넥션을 유지하여 오히려 http thread 갯수만 늘어나서 독이될 수 있습니다.
(최대 용량은 아직 놀고있으면서 커넥션이 안되어서 TPS가 현저하게 떨어질 것으로 예상..)
용도별로 Apache Port 분리하여 KeepAlive Option을 적절히 이용하는게 해법일 수 있겠습니다.

2. 커널 파라미터 튜닝net.ipv4.tcp_fin_timeout = 30
: FIN_TIMEOUT 대기 시간을 줄이면 끊어진 소켓의 소거 시간을 줄일 수 있음

net.ipv4.tcp_rfc1337 = 1
: 클라이언트의 소켓으로부터 RST를 받아 TIME_WAIT 상태로 가는 경우 즉시 소켓을 종료시킴

net.ipv4.tcp_max_tw_buckets =2000000
: 동시에 유지 가능한 timewait 소켓의 수

위 커널 파라미터를 적절히 튜닝하는게 좋겠습니다. 특히 웹서버인경우 FINE_TIMEOUT 대기시간을 먼저 줄여보는 방법이 좋아보입니다.

Leave your Comment

Your email address will not be published. Required fields are marked *