Netstat 결과중 TIME_WAIT이 많을때

요즘은 내가 개발자인지 서버 관리자인지 모르겠다.

드디어 그동안 답을 찾지 못한 것중 하나인 겁나 많은 TIME_WAIT 들을 사라지게 하는 방법을 찾았습니다.

echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse

tcp_tw_recycle : time_wait 포트를 빠른속도로 재활용할수 있게 해준다. (일부 로드벨런스 장비에서 문제가 발생할수 있다고 한다)
tcp_tw_reuse : 새로운 커넥션이 time_wait 포트를 사용할수 있게 해준다.

출처: http://padudu.tistory.com/39 [padudu]

netstat -nap | grep TIME_WAIT 이라고 실행하면 저의경우 대부분 Apache나 MySQL에 관련된 연결정보를 자주 볼 수 있었습니다. 특히 Apache 환경의 웹서버에서 사용자가 좀 붙으면 TIME_WAIT들이 쌓여나가죠. 이걸 전문 서버 관리자에게 물어 보니 이건 서버에 웬만해선 아무 영향을 안준다고 하긴 하는데요. 몇천개 정도 쌓여 있으면 서버가 버벅거리는 것 같기도 하고 … 암튼, 저것도 서버의 리소스를 쓰고 있을건데… 라는 생각이 들었는데 이걸 확 줄여버릴수 있는 방법이 있었네요. 로드벨런스 장비 사용하는 것이 아니니 적용해보고 있습니다. 특히 request를 처리하고 빨리 닫아야 하는 API 서버쪽에요.  아직까지는 아주 만족하고있습니다.

좀더 자세한 설명은 아래 링크를 클릭하세요.

부하가 매우 높을때만 간헐적으로 발생하는 걸로 봐서 위에서 언급한 ‘빈 포트를 찾기 위해 전체 바인드 해시 테이블을 뒤지는 문제’ 비용이 높기 때문으로 보였다. 이미 로컬 포트를 다 사용한 상태에서 매 번 스캔에 리소스를 허비하는 것이다.

TIME_WAIT 상태란 무엇인가, http://docs.likejazz.com/time-wait/

다른 글도 있군요. 갑자기 눈에 들어 오기 시작하는 이유는 뭔지는 모르겠지만 웹서버가 느려서 보면 TIME_WAIT 이 많은데 아마도 아래의 현상도 한몫 하는건지도 모르겠습니다.

case2. 클라이언트 소켓 고갈

서버에서 다른 서버로 연결을 하는데 TIME_WAIT 시간 안에 모든 포트를 다 써버려서 연결이 안될 수 있다. 즉 클라이언트 포트가 고갈된 상태이다. 일단은 Connection pool을 잘 만들어서 지속적인 연결을 유지하는 것을 먼저 고려하는게 좋다. 리눅스의 경우 net.ipv4.tcp_tw_reuse을 1로 바꾸어 TIME_WAIT에 빠진 포트를 재사용 할 수도 있다.

TCP TIME_WAIT 가벼운 정리, http://devbv.com/2017/04/01/timewait/

Published by: benant

WEB PROGRAMMER. PHP, nodeJs, ASP, XML, Javascript, VBScript, PL/SQL, MySQL, Oracle. scrollads.co.kr 새로운 모바일 광고 서비스. trenue.com 시스탬 트래이딩 서비스. blogman.co.kr 블로그 운영 관리 서비스. creget.co.kr 해외 상품 구매대행. 핫딜 정보 제공 서비스. fgshop.co.kr - 독립형 쇼핑몰 솔루션.

카테고리 컴퓨터, Programming댓글 남기기

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중