상세 컨텐츠

본문 제목

[AIX] listen() backlog 설정값 확인

카테고리 없음

by Keunwoo.LEE 2022. 11. 24. 11:12

본문

반응형

인프라를 운영하다보면 시스템 자원은 여유로운데 외부의 접속이 지연이 생기는 경우가 종종 있다.

여러가지 이유가 있겠지만, 간혹 backlog 사이즈가 작아서 접속이 안되는 경우가 생긴다.

이때 개발자가 backlog 개념을 충분히 이해하고 있다면 좋겠지만, TCP 핸드쉐이킹은 커널의 역할로만 생각하고 어플리케이션 입장에서 접속 요청이 없었다면서 시스템 문제라고 치부하는 경우가 있다.

이때 인프라 관리자 입장에서 해당 어플리케이션에 충분한 backlog가 있는지 확인이 필요할때가 있다.

 

listen() 함수의 backlog 설정값 확인

  • backlog 사이즈는 시스템의 somaxconn 값과 어플리케이션의 listen() 값중 낮은 값을 이용한다.

netstat -ano 에서 qlimit 으로 확인

  • 아래 예시에서 backlog 값은 30 (qlimit:30)

netstat -ano로 backlog 확인

q0len, qlen, qlimit에 대해서

  • qlimit은 listen() 함수의 backlog 값 or no 명령어의 somaxconn 값 중 낮은값
  • qlen은 완료된 연결 수 (3방향 핸드쉐이크 완료 후 accept()를 기다리는 세션 수)
  • q0len은 클라이언트로부터의 3방향 핸드쉐이크(ACK)의 세 번째 세그먼트를 기다리는 세션 수
  • (qlen+q0len)이 소켓의 qlimit의 1.5배를 넘으면 tcp 스택은 클라이언트로부터의 신규 접속용 SYN 패킷을 폐기하고 "discarded due to listener's queue full" 카운터를 증가시킴
반응형

댓글 영역