본문 바로가기
java/기타

JDBC Connection pool 모니터링 지표에 대한 이해

by 권성호 2021. 12. 1.

서버군 모니터링 인프라 구축 업무 중, Jdbc Connection pool을 모니터링해야 할 일이 생겨 공부한 내용을 정리합니다.

 

스레드 풀과 커넥션 풀의 기본 개념을 이해하고 있다고 가정합니다.

 

목표는 아래와 같습니다.

  1. active connection / idle connection / pending thread의 의미를 이해한다.
  2. connection usage time / creation time / acquire time 의 의미를 이해한다.

 

3-계층 구조

가장 흔한 구조인 3-계층 구조를 그림으로 간단히 표현했습니다.

 

위 그림에서 WAS에 집중해 보겠습니다. WAS가 사용자 요청을 처리하는 방법은 아래와 같습니다.

  • 사용자 요청이 감지되면, 해당 요청을 처리하기 위한 담당 스레드를 스레드 풀로 부터 얻습니다.
    • 이 과정에서 어떠한 이유로 스레드를 배정받지 못한 요청은 대기 큐에서 일정시간 대기하게 됩니다.
  • 스레드가 배정되면 요청을 처리하기 위한 비즈니스 로직을 진행합니다.
  • 비즈니스 로직 처리 중 Database에 접근해야 할 일이 발생하게 되면 스레드는 커넥션 풀에게 커넥션을 요청합니다.
    • 이 과정에서도 역시, 어떠한 이유로 커넥션을 배정받지 못한 경우 해당 스레드는 대기 상태가 됩니다.
  • 커넥션을 얻게 되면 이제 Database 작업을 수행합니다.
  • Database작업을 마친 후 해당 커넥션을 커넥션 풀에 다시 반납하고 나머지 비즈니스 로직을 처리합니다.

idle connection이란, 스레드에 할당되어 있지 않고 커넥션 풀에서 놀고 있는 커넥션을 의미합니다.

active connection이란, 스레드에 할당되어 Database관련 작업을 수행하는 데 사용되고 있는 커넥션을 의미합니다.

pending thread란, 커넥션 풀에 커넥션을 요청하였지만 특정 원인으로 인해 커넥션을 할당받지 못해 대기 중인 스레드를 의미합니다.

 

connection usage time이란, 스레드가 특정 커넥션을 사용하기 위해 가져간 후부터 반납하기까지 소요된 시간을 의미합니다.

connection creation time이란, 커넥션 풀에서 특정 커넥션을 생성하는데 걸린 시간입니다.

(일반적으로 커넥션 풀 설정에 최소로 유지되어야 하는 커넥션 개수를 지정하게 되고, 커넥션 풀은 그 수보다 적은 커넥션이 존재할 시, 자동으로 커넥션을 만들려고 시도합니다.)

connection acquire time이란, 스레드가 커넥션 풀로부터 커넥션을 요청할 때부터 실제로 할당받을 때까지 소요된 시간을 의미합니다.

 

 

해당 지표는 커넥션 풀을 모니터링하기 위해 필수적으로 수집되어야 합니다.

 

예를 들어, active connection의 수치가 지속해서 증가하는 상황이 감지된다면, 커넥션의 누수를 의심해 볼 수 있습니다.

또한, acquire time이 계속 높은 수치를 기록하고 있다면, 커넥션 풀의 데드락 발생 가능성을 의심해 볼 수 있습니다.

 

'java > 기타' 카테고리의 다른 글

[Collection Framework] 정리  (0) 2022.01.04
Thread pool vs Reactive  (0) 2021.12.01
java - Exception과 logging이 성능에 미치는 영향  (0) 2021.10.08
java - InputStream& OutputStream close  (0) 2021.09.28
Java - Enum  (0) 2021.09.24

댓글