티스토리 뷰


웹서비스 개발을 하다보면 여러명의 개발자가 동시에 개발하다보니 뜻하지 않게 DB Connection 누수가 발생하는 경우가 있다.

프레임워크에서 Pool을 관리하기도 하지만 개별적으로 Connection을 받아서 만든 프로그램이 어디에 숨어있는지 모르는 일이고, 이런 프로그램이 존재하게 되면 수시로 시스템을 리부팅해야 하는 상황이 생기게 된다.

웹로직 콘솔로그에서 다음과 같은 메시지가 나온다면 특정 프로그램에서 Connection Pool이 새고 있다고 봐야 한다. 하지만 설정에 따라서 어떤 프로그램에서 누수가 발생하는지 알수가 없다.

 <2005. 4. 25. 오전 9시 55분 7초 KST> <Warning> <JDBC> <BEA-001074> <A JDBC pool connection leak was detected. A connection leak occurs when a connection obtained from the pool was not closed explicitly by calling close() and then was disposed by the garbage collector and returned to the connection pool. The following stack trace at create shows where the leaked connection was created.  [Null exception passed, creating stack trace for offending caller]
 at weblogic.utils.StackTraceUtils.throwable2StackTrace(StackTraceUtils.java:28)
 at weblogic.jdbc.wrapper.PoolConnection.finalizeInternal(PoolConnection.java:84)
 at weblogic.jdbc.wrapper.PoolConnection_oracle_jdbc_driver_T4CConnection.finalize(Unknown Source)
 at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
 at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83)
 at java.lang.ref.Finalizer.access$100(Finalizer.java:14)
 at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160)


이 메시지가 보이면 웹로직 콘솔 설정에서 Services > JDBC > Connection Pools 메뉴에서
해당 Connection Pool의 Connections > Advances Options 메뉴의
Enable Connection Leak Profiling 부분을 체크한다.

말 그대로 Connection 누수내용을 프로파일링 한다는 것이다.

 <2005. 4. 26. 오후 12시 34분 39초 KST> <Warning> <JDBC> <BEA-001074> <A JDBC pool connection leak was detected. A connection leak occurs when a connection obtained from the pool was not closed explicitly by calling close() and then was disposed by the garbage collector and returned to the connection pool. The following stack trace at create shows where the leaked connection was created.  Stack trace at connection create:
 at weblogic.jdbc.wrapper.PoolConnection.init(PoolConnection.java:56)
 at weblogic.jdbc.pool.Driver.allocateConnection(Driver.java:254)
 at weblogic.jdbc.pool.Driver.connect(Driver.java:164)
 at weblogic.jdbc.jts.Driver.getNonTxConnection(Driver.java:507)
 at weblogic.jdbc.jts.Driver.connect(Driver.java:139)
 at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:305)
 at com.gmdat.common.RDBConnectionTop.getConnection(RDBConnectionTop.java:46)
 at com.gmdat.util.ReserveDAO.chkReserveCount2(ReserveDAO.java:1295)
 at com.gmdat.util.ReserveDAO.deleteReserve2(ReserveDAO.java:1270)
 at jsp_servlet._charm._reservation.__charm_reserv_cancel._jspService(__charm_reserv_cancel.java:172)
 at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
 at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996)
 at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
 at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:315)
 at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6452)
 at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
 at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
 at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3661)
 at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2630)
 at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
 at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)



굵게 표시된 부분을 보면 어디서 누수가 발생했는지 알수가 있다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday