본문으로 바로가기

[JAVA] Close_Wait 문제 해결

category Java 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

 

'Java' 카테고리의 다른 글

[Java] Finally block does not complete normally  (0) 2020.07.25