MySQL Connector 메모리 누수 문제 해결법 (feat. HikariCP)
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

당신의 MySQL Connector, 안전한가요? (feat.메모리 누수)

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

  • Java/Spring Boot 개발자데이터베이스 관리자
  • 중급~고급 수준의 JVM, 메모리 관리, HikariCP 이해 필요
  • MySQL 커넥터와 연결 풀 설정에 대한 실무 경험자

핵심 요약

  • AbandonedConnectionCleanupThread가 메모리 누수의 원인임을 Heap Dump 분석으로 확인
  • HikariCP의 max-lifetime 설정이 짧아지면 AbandonedConnection 누적으로 병목 발생
  • 두 가지 해결책 제시: max-lifetime 조정 또는 AbandonedConnectionCleanupThread 비활성화

섹션별 세부 요약

###Situaction

  • Heap 사용량 90% 이상으로 GC 수행 시 메모리 감소 없음 → 메모리 누수 의심
  • Grafana 대시보드를 통해 Eden Space 및 GC Count 분석
  • Heap Dump 생성 및 MAT 분석으로 MySQL Connection 관련 누수 발견

###AbandonedConnectionCleanupThread, 너 누군데?

  • HikariCP 2.0 이상에서 제공되는 Connection 정리 스레드
  • newSingleThreadExecutor단일 스레드로 실행 → 병목 가능성
  • NetworkResources.forceClose() 호출로 네트워크 리소스 종료 시도

###Action

  • max-lifetime 값을 30분(디폴트)으로 조정 → AbandonedConnection 누적 속도 감소
  • MySQL Connector 8.0.22 이상 업그레이드 및 -Dcom.mysql.cj.disableAbandonedConnectionCleanup=true 설정으로 스레드 비활성화

###Result

  • Heap 사용량 감소메모리 누수 해결 확인
  • HikariCP HouseKeeper가 커넥션 관리 역할 수행 → AbandonedConnectionCleanupThread 필요성 감소

결론

  • HikariCP의 max-lifetime 설정을 적절히 조정하거나, AbandonedConnectionCleanupThread 비활성화를 통해 메모리 누수 예방
  • MySQL Connector 8.0.22 이상 업그레이드를 권장하며, -Dcom.mysql.cj.disableAbandonedConnectionCleanup=true 설정으로 스레드 비활성화 적용
  • Heap Dump 분석JDK 도구 활용을 통해 메모리 문제 식별 및 해결 가능