2025-10-15
1일 1아티클
우아한기술블로그
Redis New Connection 증가 문제
배경
Spring Boot 3.2.4,lettuce 6.3.2,elasticache valkey 8- 피크 시간대 이후에도 신규 커넥션 연결 지표가 감소하지 않는 문제
- Lettuce 설정 상 커넥션 풀 사용 중임에도 커넥션 생성 수 문제 발생 중
예상 원인
- 파이프라이닝에서 커넥션 사용
- 여러 명령을 묶어서 효율적으로 처리하고자,
redisTemplate의executePipelined()method 사용 - 내부적으로
LettuceConnection클래스의openPipelined()method 사용 - 여러 개의 커넥션 사용 but 전용 커넥션 할당(공유 커넥션 사용 X)
- 여러 명령을 묶어서 효율적으로 처리하고자,
- 커넥션 풀
- 커넥션 풀 설정을 yml에서 최대 20개로 했기에, 재사용이 정상적으로 이루어진다면 커넥션 생성 수가 많아질 수 없음
- 로그 확인 → Lettuce의
ConnectionWatchDog클래스에서 connection 중단 시 재연결 시도하는 로그 확인
GenericObjectPool 사용, 이때 connection을 가져오는 전략은 LIFO
- 일시적 트래픽 증가로 커넥션 풀이 최대로 만들어진 후 트래픽이 줄어들면?
- LIFO 전략에 의해 최근 사용한 커넥션 일부만 사용, 나머지 커넥션은 IDLE 상태로 남게 됨!
Redis의 timeout 파라미터
timeout: Redis에서 IDLE 클라이언트 연결을 끊기 전에 기다리는 시간, AWS ElastiCache 기준 parameter group에서도 확인 가능
문제 흐름
- ElastiCache에서
timeout초동안 사용하지 않은 IDLE connection 제거 - 서버에서는 connection이 닫히면,
ConnectionWatchDog에 의해 재연결 수행
해결 방법
- LIFO → FIFO 방식으로 커넥션 풀 전략 변경
- yml에서는 해당 파라미터 수정 불가
GenericObjectPoolConfig내부 LIFO 값을 false로 수정- 커넥션 풀에 존재하는 connection들이 IDLE 상태로 남지 않고 재사용됨
- IDLE connection에 대한 정리
- 커넥션 풀에 설정
minEvictableIdleDuration: connection이 설정한 시간 동안 아무 일을 하지 않으면(IDLE 상태) 제거 대상으로 간주timeBetweenEvictionRuns: IDLE connection 제거 작업 주기
오늘 배운 것
- AI
- 워드임베딩
- RNN & LSTM
- 바이브 프로젝트 기능 개발
- 스프링 테스트 시 환경변수 설정..??
내일 할 일
- AI