
백엔드
99%가 모른다는 DB Connection 누수 문제
두줄요약
JDBC Driver 변경 이후 발생한 OOM 원인을 DB Connection 누수로 추적하고 Heap Dump로 확인했습니다. mysql-connector-j 업그레이드와 cleanup thread 비활성화로 문제를 해결했습니다.
문제 상황
- MariaDB에서 MySQL JDBC Driver로 변경한 뒤 AWS EC2 인스턴스가 주기적으로 OOM으로 종료되는 현상
- API 응답 지연과 함께 메모리 사용량이 지속적으로 증가하는 장애 징후
원인 분석
- Heap Dump 분석 결과 AbandonedConnectionCleanupThread와 connectionFinalizerPhantomRefs에 메모리 집중
- mysql-connector-j의 연결 정리 작업이 단일 스레드로 처리되어 병목 발생
- HikariCP의 짧은 max-lifetime 설정으로 Connection 재생성 속도가 처리 속도를 초과
해결 방법
- mysql-connector-j 8.0.22 이상으로 업그레이드
- -Dcom.mysql.cj.disableAbandonedConnectionCleanup=true 옵션으로 cleanup thread 비활성화
- max-lifetime 조정과 옵션 적용 후 메모리 점유 개선 확인
