Post

HttpClients의 ConnectionTimeToLive와 EvictIdleConnections 설정

HttpClients의 연결 설정을 사용하기 위한 객체를 생성시에 사용할 옵션 중에서 ConnectionTimeToLive와 EvictIdleConnections 설정 방법에 대한 설명

HttpClients의 ConnectionTimeToLive와 EvictIdleConnections 설정

ConntectionTimeToLive

  • 커넥션의 최대 생존 시간을 설정하는 속성값
  • 적설히 설정을하면 성능 향상에 도움이 됨
  • 기본값 : -1(무제한)
    • 커넥션이 영원히 유지되어 메모리 누수 발생

사용시 장점

  • 커넥션 재사용
    • 설정된 시간 내에서 기존 커넥션을 재사용하여 TCP 3 Way Handshake와 SSL/TLS Handshake 오버헤드를 절약
  • 리소스 효율성
    • 새로운 커넥션 생성 비용을 줄임

사용시 주의사항

  • 너무 긴 설정
    • 불필요한 커넥션이 오랫동안 유지되어 메모리 사용량 증가
  • 너무 짧은 설정
    • 자주 새로우 커넥션을 생성해야 하므로 리소스 사용량 증가

EvictIdleConnection

  • 백그라운드 스레드로 유휴 커넥션을 정리하는 기능
  • 기본값 : 비활성화
    • 유휴 커넥션이 전혀 정리되지 않음
    • 사용하지 않는 커넥션들이 계속 메모리를 점유

사용시 장점

  • 메모리 최적화
    • 사용하지 않는 커넥션을 자동으로 정리하여 메모리 사용량 감소
  • Half-closed Connection 문제 해결
    • 서버에서 닫힌 커넥션을 클라이언트에서 계속 유지하는 문제를 방지
  • 리소스 관리
    • 커넥션 풀의 효율적인 관리로 전체적인 성능 향상

사용시 주의사항

  • 백그라운드 스레드 오버헤드
    • 추가적인 모니터링 스레드가 실행됨
  • 적절한 시간 설정 필요
    • 너무 짧으면 유효한 커넥션도 삭제될 수 있음

ConnectionTimeToLive와 EvictIdleConnections 관계

구분ConnectionTimeToLiveEvictIdleConnections
시간 개념커넥션의 절대적 생존시간
커넥션이 생성된 시점부터 최대 얼마나 오래 유지될지 결정
유휴 커넥션의 정리 시간
사용되지 않고 있는 커넥션을 언제 정리할지 결정
정리시점활발히 사용 중이어도 이 시간이 지나면 강제로 종료됨백그라운드 스레드가 주기적으로 실행하여 Idle 상태의 커넥션을 정리

시간 설정시 EvictIdleConnections > ConnectionTimeToLive 로 설정시에는 EvictIdleConnections의 설정 시간으로 정리가 들어가지너에 강제로 종료되어 의미가 없음.

권장 설정 비율 : EvictIdleConnections의 값은 ConnectionTimeToLive의 1/2 ~ 1/3 정도로 설정하는 것이 좋음

권장 설정값

일반적인 웹 애플리케이션

ConnectionTimeToLiveEvictIdleConnections
30초10초

고빈도 API 호출 서비스

ConnectionTimeToLiveEvictIdleConnections
60초20초

배치 처리 애플리케이션

ConnectionTimeToLiveEvictIdleConnections
1200초30초
This post is licensed under CC BY 4.0 by the author.