목록 보기
99%가 모른다는 DB Connection 누수 문제
백엔드

99%가 모른다는 DB Connection 누수 문제

마켓컬리
마켓컬리
2025년 1월 5일

두줄요약

짧은 HikariCP max-lifetime과 mysql-connector-j 정리 스레드 병목으로 발생한 Connection 누수를 분석했습니다.\n드라이버 업그레이드와 정리 스레드 비활성화로 OOM 문제를 해결했습니다.

문제 상황

  • MariaDB에서 MySQL JDBC Driver 변경 후 AWS EC2의 주기적 OOM과 인스턴스 교체
  • Old Gen 정체, New 영역 GC 반복, API 애플리케이션 점유 시간 급증

원인 분석

  • Heap Dump에서 AbandonedConnectionCleanupThread와 connectionFinalizerPhantomRefs에 대량 적재된 ConnectionImpl 확인
  • 단일 스레드 기반 네트워크 리소스 정리 속도가 50초 max-lifetime에 따른 빠른 Connection 재생성 속도를 미추월
  • PhantomReference와 ReferenceQueue 기반 정리 대기 객체의 누적으로 메모리 점유 확대

해결 방법

  • max-lifetime 증가 또는 mysql-connector-j 8.0.22 이상 업그레이드 후 정리 스레드 비활성화
  • JVM 옵션 -Dcom.mysql.cj.disableAbandonedConnectionCleanup=true 적용
  • 옵션 적용 뒤 Heap Dump 내 정리 스레드 기반 메모리 점유 제거와 수개월간 안정 운영 확인

주의할 점

  • DB 쿼리 시간보다 애플리케이션 점유 시간이 긴 요청과 GC 이상 징후 관찰
  • 트래픽 급증으로 오인하기 쉬운 OOM 장애에서 Heap Dump 우선 분석

다음 읽기

#Java 주제를 이어서 읽기

99%가 모른다는 DB Connection 누수 문제

JDBC Driver 변경 이후 발생한 OOM 원인을 DB Connection 누수로 추적하고 Heap Dump로 확인했습니다. mysql-connector-j 업그레이드와 cleanup thread 비활성화로 문제를 해결했습니다.

마켓컬리
마켓컬리
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...