HttpClients의 ConnectionTimeToLive와 EvictIdleConnections 설정
HttpClients의 연결 설정을 사용하기 위한 객체를 생성시에 사용할 옵션 중에서 ConnectionTimeToLive와 EvictIdleConnections 설정 방법에 대한 설명
HttpClients의 ConnectionTimeToLive와 EvictIdleConnections 설정
ConntectionTimeToLive
- 커넥션의 최대 생존 시간을 설정하는 속성값
- 적설히 설정을하면 성능 향상에 도움이 됨
- 기본값 :
-1(무제한)
- 커넥션이 영원히 유지되어 메모리 누수 발생
사용시 장점
- 커넥션 재사용
- 설정된 시간 내에서 기존 커넥션을 재사용하여
TCP 3 Way Handshake와 SSL/TLS Handshake 오버헤드를 절약
- 설정된 시간 내에서 기존 커넥션을 재사용하여
- 리소스 효율성
- 새로운 커넥션 생성 비용을 줄임
사용시 주의사항
- 너무 긴 설정
- 불필요한 커넥션이 오랫동안 유지되어
메모리 사용량 증가
- 불필요한 커넥션이 오랫동안 유지되어
- 너무 짧은 설정
- 자주 새로우 커넥션을 생성해야 하므로
리소스 사용량 증가
- 자주 새로우 커넥션을 생성해야 하므로
EvictIdleConnection
- 백그라운드 스레드로 유휴 커넥션을 정리하는 기능
- 기본값 : 비활성화
- 유휴 커넥션이 전혀 정리되지 않음
- 사용하지 않는 커넥션들이 계속 메모리를 점유
사용시 장점
- 메모리 최적화
- 사용하지 않는 커넥션을 자동으로 정리하여 메모리 사용량 감소
- Half-closed Connection 문제 해결
- 서버에서 닫힌 커넥션을 클라이언트에서 계속 유지하는 문제를 방지
- 리소스 관리
- 커넥션 풀의 효율적인 관리로 전체적인 성능 향상
사용시 주의사항
- 백그라운드 스레드 오버헤드
- 추가적인 모니터링 스레드가 실행됨
- 적절한 시간 설정 필요
- 너무 짧으면 유효한 커넥션도 삭제될 수 있음
ConnectionTimeToLive와 EvictIdleConnections 관계
구분 | ConnectionTimeToLive | EvictIdleConnections |
---|---|---|
시간 개념 | 커넥션의 절대적 생존시간 커넥션이 생성된 시점부터 최대 얼마나 오래 유지될지 결정 | 유휴 커넥션의 정리 시간 사용되지 않고 있는 커넥션을 언제 정리할지 결정 |
정리시점 | 활발히 사용 중이어도 이 시간이 지나면 강제로 종료됨 | 백그라운드 스레드가 주기적으로 실행하여 Idle 상태의 커넥션을 정리 |
시간 설정시
EvictIdleConnections > ConnectionTimeToLive
로 설정시에는 EvictIdleConnections의 설정 시간으로 정리가 들어가지너에 강제로 종료되어 의미가 없음.권장 설정 비율 : EvictIdleConnections의 값은 ConnectionTimeToLive의 1/2 ~ 1/3 정도로 설정하는 것이 좋음
권장 설정값
일반적인 웹 애플리케이션
ConnectionTimeToLive | EvictIdleConnections |
---|---|
30초 | 10초 |
고빈도 API 호출 서비스
ConnectionTimeToLive | EvictIdleConnections |
---|---|
60초 | 20초 |
배치 처리 애플리케이션
ConnectionTimeToLive | EvictIdleConnections |
---|---|
1200초 | 30초 |
This post is licensed under CC BY 4.0 by the author.