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

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

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

두줄요약

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 조정과 옵션 적용 후 메모리 점유 개선 확인

다음 읽기

#Java 주제를 다룬 다른 회사 글

메모리 누수의 개념과 방지 방법

메모리 누수의 개념과 원인을 GC Root 관점에서 설명했습니다. 리소스 해제, static 변수 관리, 약한 참조 활용으로 예방하는 방법을 정리했습니다.

넥스트리
넥스트리
백엔드

댓글 0개

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

댓글을 불러오는 중...