달력

6

« 2025/6 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

'inactive timeout'에 해당되는 글 1

  1. 2010.01.25 JDBC connection leak 4
2010. 1. 25. 15:48

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
- DIAGNOSIS:
In the wrapper Statement internalClose()method we mistakenly nullify the local variable conn so that we can't set the connection not-in-use in the postInvoke() method after JDBC call has competed. The connection will be thought in the middle of call forever and the pool will never retract it therefor connection leaking happens.
- RESOLUTION:
Now we do not nullify conn in the internalClose()method of Statement
- RELEASE NOTE:
Now JDBC connection leak will be detected if all statements are closed but the connection is not released.

 

 




WLS9.x
에서 leak connection recovering 나타나는 로그 파일에 추가되는 내용이다.
, leak 이라고 판단되는 Connection "Inactive Connection Timeout" 설정된 이후 자동으로 회수할 아래의 내용이 로그에 출력될 것이다. 사용자는 해당 로그를 통해 잘못된 로직을 수정해야 한다.

<2009. 9. 24 오후 7 21 22 ACT> <Warning> <JDBC> <BEA-001153> <Forcibly releasing inactive conn
ection "[weblogic.jdbc.wrapper.JTAConnection_weblogic_jdbc_wrapper_XAConnection_oracle_jdbc_driver_L
ogicalConnection-ora920DS-1, oracle.jdbc.driver.LogicalConnection@1f36af6]" back into the connection
pool "ora920DS", currently reserved by: java.lang.Exception

 

 

참고 자료.

http://download.oracle.com/docs/cd/E12840_01/wls/docs103/jdbc_admin/jdbc_datasources.html#wp1198474


:
Posted by 버드MC