피드로 돌아가기
Stabilizzazione dell'Infrastruttura: Gestire il Connection Pooling tra Proxy e Backend
Dev.toDev.to
Infrastructure

connectiontimeout 최적화로 Apache fork 에러 및 CLOSE_WAIT 완전 제거

Stabilizzazione dell'Infrastruttura: Gestire il Connection Pooling tra Proxy e Backend

minnogit2026년 5월 18일5intermediate

Context

Apache Proxy와 Backend 간의 TCP Socket 관리 미흡으로 인한 리소스 포화 상태 발생. Backend의 응답 지연이 Proxy Worker의 점유 시간 증가로 이어져 신규 요청을 처리할 Thread를 생성하지 못하는 fork 에러 직면.

Technical Solution

  • TCP Handshake 단계와 Application Response 단계를 분리하여 리소스 점유 최적화
  • connectiontimeout=2 설정을 통해 Backend 연결 초기 단계의 응답 지연 시 Worker를 즉시 해제하는 구조 설계
  • balancer:// 구문을 활용해 글로벌 타임아웃은 유지하면서 연결 시도 시간만 제한하여 Long-running Script 처리 능력 보존
  • hcinterval=5 기반의 TCP Health Check를 적용하여 상태 불량 노드를 클러스터에서 자동 격리
  • Puppet Server를 통한 설정 중앙화를 통해 인프라 전반의 구성 일관성 확보

Key Takeaway

인프라 계층의 연결 타임아웃(Network Timeout)과 애플리케이션 처리 시간(Application Timeout)을 엄격히 분리하여, 개별 서비스의 비즈니스 요구사항을 보존하면서 시스템 전체의 가용성을 확보하는 설계 원칙 도출.


- netstat을 통한 CLOSE_WAIT 소켓 상태 모니터링 및 누적 여부 확인 - Apache BalancerManager 사용 시 Route별 타임아웃 개별 설정 불가 제약 사항 인지 - TCP Handshake 타임아웃을 짧게 설정하여 Backend 장애 시 Proxy Worker 고갈 방지

원문 읽기