본문 바로가기
WAS/WEBLOGIC

31. DB 커넥션풀

by coldplayer83 2024. 5. 23.
728x90

커넥션풀 생성 후 초기 용량은 다음과 같다

 

초기 용량(Initial Capacity): 1

최대 용량(Maximum Capacity) : 15

최소 용량(Minimum Capacity) : 1

 

인스턴스 시작시 초기 용량만큼 풀이 생성되고, 접속량이 늘어나면 최대값까지 풀이 늘어남

이후 접속량이 줄어들면 최소 용량만큼 풀이 줄어듦

초기에 inactive session으로 생성됨

 

풀이 늘고 주는 폭이 클 경우 이 또한 서버에 부하 + 자원 사용 부분이기 때문에 초기 용량과 최소 용량 개수를 맞춰주는 것이 좋다

 


 

서비스 접속량이 늘어 커넥션풀이 최대치만큼 차면 'Reached maximum capacity of pool' 내용의 메세지가 발생함

<Aug 2, 2010 2:25:21 PM EDT> <Info> <Common> <server.domain> <node> <ExecuteThread: '48' for queue: 'weblogic.kernel.Default'> <> <> <BEA-000627> <Reached maximum capacity of pool "<ConnectionPoolName>", making "0" new resource instances instead of "1".>

exception : weblogic.jdbc.extensions.PoolLimitSQLException: weblogic.common.resourcepool.ResourceLimitException: No resources currently available in pool <ConnectionPoolName> to allocate to applications, please increase the size of the pool and retry..
weblogic.jdbc.extensions.PoolLimitSQLException: weblogic.common.resourcepool.ResourceLimitException: No resources currently available in pool <ConnectionPoolName> to allocate to applications, please increase the size of the pool and retry..

 

이 경우 무조건 커넥션풀을 늘려주는 것이 아닌 아래 내용의 확인이 필요하다

 

1. 일시적으로 사용량이 늘어 발생했는지 or 커넥션풀이 정상적으로 반납되지 않아 풀이 부족한지 확인

일시적으로 사용량이 늘어 발생한 경우 커넥션 풀을 늘려주면 해결될 수 있지만 커넥션풀이 정상적으로 반납되지 않아 발생하는 경우 어플리케이션 측에서 풀을 제대로 반납하지 않는 부분이 있는 지 확인 및 조치가 필요하다

 

=> 소스에서 close() 되지 않은 부분이 있는지 확인

 

2. 디비 세션 확인

웹로직에서 풀 최대값을 늘려줘도 디비 세션에서 해당 값만큼 받을 수 없다면 서버 장애 발생 위험이 있다

 

웹로직 풀 개수는 다음과 같다

ex) 인스턴스 개수 2개, 풀 최대값 15라면 2 * 15 = 30. 총 30개의 커넥션풀이 생성됨

 

=> 늘려줄 최대값만큼 디비 세션에서 정상적으로 받을 수 있는지 확인 필요

풀을 늘려줄 때는 5~10 단위로 늘리면서 해당 에러가 해소되는지 확인 필요

 

디비 세션 확인 방법)

select username, status from v$session;
select username, status from v$session where username='oracle';

보통 디비 세션 하나당 2~3000개 정도의 풀 사용

 

웹로직에서 데이터소스 사용 유저 확인하는 방법)

 


 

소스에서 커넥션풀을 반납하지 않는 부분이 있어 maximum capacity가 발생하는 경우 소스에서 close()가 정상적으로 되지 않는 부분을 찾아 수정하는 것이 최우선임

하지만 당장 소스 수정으로 해결하기 어려운 경우 웹로직에서 조치할 수 있는 방안은 다음과 같다

 

1. Enable Connection Leak Profiling 옵션 활성화(10g 이하 버전)

관리 콘솔 - JDBC 데이터소스 - 구성 - 데이터소스 이름 - 커넥션풀 - 구성 탭에서 고급 클릭

Enable Connection Leak Profiling 옵션 체크

 

2. Inactive Connection Timeout 설정(11g 이상 버전)

관리 콘솔 - JDBC 데이터소스 - 구성 - 데이터소스 이름 - 커넥션풀 - 구성 탭에서 고급 클릭

Inactive Connection Timeout(활성 상태가 아닌 접속 시간 초과) 값 설정

0이면 기능 off이고, 설정 값은 어플리케이션에서 충분히 업무처리가 가능한 정도의 시간으로 설정하도록 할 것

이 시간 미만으로 하면 정상적으로 처리중이던 업무도 중간에 중지됨

 

이 옵션을 설정하면 로그에 'forcibly ~'로 커넥션풀을 회수하는 로그가 남는다

해당 로그로 소스쪽 leak 부분 유추 가능

 

이 옵션은 oracle 측에서 사용을 비권장하는 옵션으로 소스에서 close()가 정상적으로 되지 않은 부분을 찾아 해결하는 것이 중요!!

 

'WAS > WEBLOGIC' 카테고리의 다른 글

33. 웹로직에서 사용중인 자바 버전 확인  (0) 2024.05.23
32. DB 연결 테스트  (0) 2024.05.23
30. 11g 패치(BSU)  (0) 2024.05.20
29. 11g(10.3.6) 설치  (0) 2024.05.20
28. weblogic 서버 ip 변경  (0) 2024.05.13