인프런 커뮤니티 질문&답변

김 재연님의 프로필 이미지

작성한 질문수

리눅스 성능 분석 시작하기

열두 번째 강의 - netstat 명령어 살펴보기 (2)

안녕하세요 netstat 2번째에서 궁금한게 있습니다.

24.01.08 09:36 작성

·

136

0

열두번째 강의 netstat(2)dptj 5:56부근에 close_wait는 애플리케이션 이상 동작이라고 설명을 해주셨는데, 이 부분이 잘 이해되지 않습니다.

client로 부터 fin 패킷을 받아서 close_wait이 되는걸로 이해했는데, 이게 왜 이상동작일까요?

답변 1

1

강진우님의 프로필 이미지
강진우
지식공유자

2024. 01. 09. 10:27

네. FIN 패킷을 받아서 CLOSE_WAIT 상태가 되고 CLOSE로 넘어가야 하는게 정상 입니다. 그리고 그 과정은 아주 빠르게 이뤄지기 때문에 실제로 netstat 명령을 입력 하면 거의 볼 수가 없어야 합니다.

그래서 CLOSE_WAIT 상태가 netstat 명령에 보인다는 건 모종의 이유로 소켓을 닫지 못하고 CLOSE상태로 변경되지 않는다는 의미이고, 이 때의 원인이 애플리케이션 이상 동작일 경우가 가장 큽니다.

https://tech.kakao.com/2016/04/21/closewait-timewait/ 문서를 보시면 CLOSE_WAIT를 재현하는 소스 코드가 있으니 그걸 보시면 훨씬 더 잘 이해하실 수 있을 겁니다. FIN 패킷을 받고 CLOSE_WAIT 상태가 된 후 소켓을 닫고 CLOSE가 되어야 하는데 그 중간에 sleep() 이 있어서 프로세스가 잠자기 상태로 들어가고 이로 인해 소켓을 닫지 못하게 되는거죠.

그래서 CLOSE_WAIT가 많다는 건 애플리케이션의 이상 동작으로 네트워크 소켓을 제대로 닫지 못하고 있다는 것을 의미 합니다.