티스토리 뷰

프로그램/JAVA

톰캣 common-dbcp

길나미 2016. 10. 18. 15:05

톰캣을 shutdown하면 아래와 같은 오류메세지를 확인할 수 있다. 

내용인즉슨

.톰캣을 종료할때 jdbcDriver를 미등록상태로 변경할때 오류가 나고 메모리 누수를 막기 위해 강제로 jdbcDriver를 미등록 상태로 만들겠다라는 내용. 




해결방법은 

  1. common-dbcp webapps/WEB-INF/lib 경로에서  tomcat/lib 경로로 이동하여 등록된 driver로 인식하게끔
  2. 톰캣입장에서는 메모리누수방지를 위해 드라이버를 강제로 해제하는것이므로 옳은일을 하고 있는것이므로 해당 오류는 무시해도 무방함.
  3. common-dbcp.1.4버전에서 메모리 누수 버그로 인하여 library 업데이트가 있음. (https://issues.apache.org/jira/browse/DBCP-330)
    jdk버전에 맞게 lib버전도 업데이트 고려

common-dbcp??

아파치에서 was에서 필요한 데이터베이스의 커넥션 및 트랜잭션관리를 좀더 유기적이고 효율적이게 하도록 디비커넥션을 풀링(?)하는 공통라이브러리

DBCP 호환성?

DBCP now comes in three different versions to support different versions of JDBC. Here is how it works:

  • DBCP 2 compiles and runs under Java 7 only (JDBC 4.1)
  • DBCP 1.4 compiles and runs under Java 6 only (JDBC 4)
  • DBCP 1.3 compiles and runs under Java 1.4-5 only (JDBC 3)

DBCP 2 binaries should be used by applications running under Java 7.

DBCP 1.4 binaries should be used by applications running under Java 6.

DBCP 1.3 should be used when running under Java 1.4 5.

출처 : https://commons.apache.org/proper/commons-dbcp/

 

joyple server common-dbcp의 버전은?(2016-09-09기준)

commons-dbcp-1.4

spring-jdbc-4.1.1

java8 

 

 

최종 common-dbcp 버전업이 필요한 이유

Tomcat shutdown시 jdbcDriver전환 오류 => 버전업 후 tomcat shutdown 테스트하였으나 동일한 메세지 나타남

Connection.getMetadata() 호출시 메모리 누수 버그

라이브러리 버전 호환성

 

 

버전업 할때 체크할 사항

  • org.apache.commons.dbcp2.BasicDataSource   변경
Parameter
Default
Description
initialSize0The initial number of connections that are created when the pool is started. 
Since: 1.2
maxTotal8The maximum number of active connections that can be allocated from this pool at the same time, or negative for no limit.
maxIdle8The maximum number of connections that can remain idle in the pool, without extra ones being released, or negative for no limit.
minIdle0The minimum number of connections that can remain idle in the pool, without extra ones being created, or zero to create none.
maxWaitMillisindefinitelyThe maximum number of milliseconds that the pool will wait (when there are no available connections) for a connection to be returned before throwing an exception, or -1 to wait indefinitely.
  • common-pool 호환성(commons-pool2-2.4.2.jar)
  • 성능테스트 -> 메모리누수 문제가 되었던 Connection.getMetadata()는 테스트결과 확실히 성능향상이 된것을 확인하였음



* 라이브러리 업데이트시 모든 프로젝트의 jdbc설정 및 mvc>common>handler class 변경이 필요하므로 당장 중요한 이슈가 아니라 판단되어 추후 jndi 설정이나 dataSourceName에 대한 정리가 있을때 라이브러리 업데이트를 같이 진행하도록.


댓글