← 질문 목록
#41깊이 0
TIME_WAIT 포트 고갈은 어떻게 진단하는가?
netstat이나 ss로 TIME_WAIT 소켓을 목적지별로 세고, 에페머럴 포트 범위와 EADDRNOTAVAIL 발생 여부를 함께 보는 것이다.
- 소켓 수 계측ss -s 또는 netstat -antp | grep TIME_WAIT
- 포트 한도 확인sysctl net.ipv4.ip_local_port_range
- 에러 로그 진단Cannot assign requested address 발생 여부
시스템에서 사용할 수 있는 에페머럴 포트 범위는 한정되어 있다. 같은 상대에게 쓸 수 있는 포트 조합이 TIME_WAIT로 다 차면 새 연결에서 EADDRNOTAVAIL이 난다. 상대가 다르면 같은 포트를 다시 쓸 수 있다.
주로 요청을 보낸 클라이언트나 백엔드 API를 호출하는 서비스에서 능동적 닫기(Active Close)를 연속으로 수행할 때 이 현상이 나타난다. 소켓 수뿐만 아니라 어떤 프로세스가 능동적 닫기를 주도하는지 확인해야 한다.
원인이 잦은 재연결이면 커넥션 풀과 HTTP Keep-Alive부터 검토한다. 커널 설정은 그다음이다.