반응형
누군가의 질문을 받고 만들어 줬습니다.
OS 상에서 CLOSE_WAI와 FIN_WAIT가 생길 때 어떻게 해야 하냐고...
정답은 프로그램에서 닫아 주어야 합니다.
소켓 클라이언트와 서버 사이에 어느 한 쪽에서 close를 했음에도(FIN 신호를 상대방으로 보냄)
상대방에서 close를 하지(FIN ACK를 보내지 않음) 않으면 close 한 쪽에는 FIN_WAIT가
close를 하지 않은 쪽에는 CLOSE_WAIT가 발생합니다.
TCP 파라미터를 조정해서 해결할 수 없냐는 경우도 있는데, 이것은 절대로 TCP 파라미터로 해결할 문제가 아니라
프로그램을 잘 짜야 하는 문제입니다. 특히 CLOSE_WAIT가 많이 발생하는 서버는 memory leak이 발생할 가능성도 매우 높습니다.
그 과정을 보여주는 예제코드를 올리니 궁금하면 테스트 해 보시기 바랍니다.
다음은 프로그램에 대한 설명입니다.
SocketServer 에서 stream으로 데이터를 클라이언트하고 다주고 받고,
클라이언트쪽 소켓이 닫히면 stream 종료(Java에서는 -1... 언어 마다 다름)를 만나면 닫아줘야 하는데 그것을 닫지 않으면fin/close_wait 현상이 발생합니다. 다음과 같이 실행하고 Server 소스에서 close 부분의 remark를 풀고도 테스트해 보시기 바랍니다.
OS 상에서 CLOSE_WAI와 FIN_WAIT가 생길 때 어떻게 해야 하냐고...
정답은 프로그램에서 닫아 주어야 합니다.
소켓 클라이언트와 서버 사이에 어느 한 쪽에서 close를 했음에도(FIN 신호를 상대방으로 보냄)
상대방에서 close를 하지(FIN ACK를 보내지 않음) 않으면 close 한 쪽에는 FIN_WAIT가
close를 하지 않은 쪽에는 CLOSE_WAIT가 발생합니다.
TCP 파라미터를 조정해서 해결할 수 없냐는 경우도 있는데, 이것은 절대로 TCP 파라미터로 해결할 문제가 아니라
프로그램을 잘 짜야 하는 문제입니다. 특히 CLOSE_WAIT가 많이 발생하는 서버는 memory leak이 발생할 가능성도 매우 높습니다.
그 과정을 보여주는 예제코드를 올리니 궁금하면 테스트 해 보시기 바랍니다.
다음은 프로그램에 대한 설명입니다.
SocketServer 에서 stream으로 데이터를 클라이언트하고 다주고 받고,
클라이언트쪽 소켓이 닫히면 stream 종료(Java에서는 -1... 언어 마다 다름)를 만나면 닫아줘야 하는데 그것을 닫지 않으면fin/close_wait 현상이 발생합니다. 다음과 같이 실행하고 Server 소스에서 close 부분의 remark를 풀고도 테스트해 보시기 바랍니다.
java SocketServer
java SocketClient
'기술' 카테고리의 다른 글
최근 진행했던 SDN/NFV 관련 세미나 두 건의 발표 자료 (0) | 2014.12.07 |
---|---|
SSH PKI 키를 자동으로 심어주는 Python 프로그램 (1) | 2014.12.03 |
간만의 WebLogic 공부 - WebLogic을 웹서버처럼 사용하기 (0) | 2014.11.27 |
Zabbix에서 WebLogic JMX 모니터링 기능 안됨 (0) | 2014.11.26 |
Orabbix: Monitor Oracle With Zabbix의 기능 (0) | 2014.11.26 |