JDBC connection leak WebLogic/JDBC2010. 1. 25. 15:48
WLS9.2 이상의 JDBC Connection leak profiling
문제.
Oracle WebLogic Server는 JDBC Connection의 Leak 여부를 감지하고, 애플리케이션에서 leak connection을 유발하는 stacktrace를 log에 출력하며, auto close해주는 기능을 가지고 있다.
이 기능을 수행하는 옵션이 기존 버전(WLS8.x 이하)과 달리 WLS9.x부터 Diagnostic framework의 개념이 도입되면서 수정되었다.
우선은, WLS에서 말하는 “Automatically Recovering Leaked Connections”의 개념과 WLS8.x와 비교하여 WLS9.x이상부터 설정하는 방법에 대해 알아본다.
WLS8.x VS WLS9.x의 설정 방법.
1. WLS8.x의 설정 방법.
Services -> JDBC-> Connection Pools -> 설정할 Connection Pool 이름 -> Connections tab -> Enable Connection Leak Profiling 체크2. WLS9.x이후 버전 설정 방법.
1) Profile Connection Leak
많은 사용자들이 혼돈하는 사항이다. 실제 위의 옵션의 의미는 다음과 같다. 해당 옵션은 data source로부터 획득한 connection을 보유하고 있는 Thread와 connection leaked된 정보를 수집한다. 이 옵션을 통해서는 leaked된 connection이 Connection Pool에 반환되는 것이 아니라 leaked된 connection을 정보를 수집하여 Diagnostic의 Data로 사용하거나 WLS log 파일에 출력하는데 사용된다.
2) Inactive Connection Timeout
JDBC의 Leaked Connection은 datasource의 Connection Pool에 정상적으로 반환되지 않는 Connection을 의미한다. - 이러한 Leaked Connection을 자동으로 회수하기 위해서는, 사용자는 관리 콘솔의 “JDBC Data Source>Configuration>Connection Pool” 페이지에서 “Inactive Connection Timeout”의 속성을 정의해야 한다. 해당 옵션의 값이 설정되면, WebLogic Server는 사용자가 정의한 시간 동안 Reserved Connection이 아무런 활동이 없는 경우 data source에 해당 connection을 강제적으로 반환해 준다. 이 옵션의 기본값은 “0”이며, 이 값의 의미는 해당 기능이 OFF상태임을 의미한다.
추가적으로, 만일 사용자 프로그램에서 모든 statement 문을 close 하고 connection 만 닫지 않은 경우 connection leak 이 detect되지 않을 것이다. 이 문제는 WLS9.1~WLS10.0MP1에서만 발생하여 이를 해결하기 위해서는 CR314547패치를 적용해야 한다. 해당 패치에 대한 상세 내용은 아래를 참조하라.
CR314547 - WLS 9.2 MP1 - JDBC connection leak not detected |
WLS9.x에서 leak connection 이 recovering 될 때 나타나는 로그 파일에 추가되는 내용이다.
즉, leak 이라고 판단되는 Connection을 "Inactive Connection Timeout"에 설정된 값 이후 자동으로 회수할 때 아래의 내용이 로그에 출력될 것이다. 사용자는 해당 로그를 통해 잘못된 로직을 수정해야 한다.
< |
참고 자료.
http://download.oracle.com/docs/cd/E12840_01/wls/docs103/jdbc_admin/jdbc_datasources.html#wp1198474
'WebLogic > JDBC' 카테고리의 다른 글
[weblogic] multi data source vs ctf(connection time failover) (0) | 2010.01.26 |
---|---|
[JDBC] WebLogic Data Source Monitoring (0) | 2010.01.25 |
[JDBC] java.sql.SQLException: Connection has already been closed (0) | 2010.01.25 |
[JDBC] servelt + JDBC 연동 개발 가이드 (0) | 2010.01.25 |
[JDBC] inactive connection timeout (1) | 2010.01.25 |