Java
[JAVA] Close_Wait 문제 해결
데피안
2020. 8. 17. 12:08
Java.net.socket 모듈을 통해 웹서버와 소켓통신을 하는 PC에서
netstat으로 확인해보니,
Close_Wait 상태인 포트들이 많이 보였다.
서비스에는 이상이 없는것 같으나,
사용자가 서비스의 특정페이지에 접속할때 ESTABLISHED 되었다가 사용자가 나가게되면
Close_Wait 상태로 있게되는데, 추후 hang up 현상이나 부하를 줄것 같아 해결이 필요했다.
결과적으로는 소스코드 문제였다.
웹서버(소켓 클라이언트) -> PC(소켓 서버) 로의 sockect 연결 후,
PC에서 while 문을 통해 input을 기다리게 되는데
클라이언트의 소켓 연결 종료 메시지를 처리하지못해 while문의 무한 loop에 빠지게 되었다.
if( input == -1 ) break;
와 같이, 클라이언트(웹서버) 가 소켓을 끊었을때 -1로 input을 받게 되는데,
이를 PC에서 처리하여 while 문에서 나오고 sockect.close() 를 진행하니 정상적으로 작동하였다.
자세한 공부 내용은 아래 사이트에 잘 정리되어있으니 참고하자.
https://tech.kakao.com/2016/04/21/closewait-timewait/
CLOSE_WAIT & TIME_WAIT 최종 분석
트래픽이 많은 웹 서비스를 운영하다보면 CPU는 여유가 있지만 웹서버가 응답을 제대로 처리하지 못하고 먹통이 되는 경우를 종종 보게 됩니다. 여러가지 이유가 있겠지만, 이 글에서는 가장 대�
tech.kakao.com