What are the steps to identify connection leak when using DBCP, JDBCTemplate and ScheduledExecutor?

767 views Asked by At

We are creating a Spring boot web app.

DB : JDBC Template and DBCP connection pool.

Java code: A runnable is called in Executors.newSingleThreadScheduledExecutor();

Time interval: 2 min

The code in runnable hits DB using JDBCTemplate.query().

Issue: The heap usage increases to several GBs in few min.

Any Pointers would be helpful to identify the memory leak.

Note: If we comment the JDBCTemplate.query() , memory usage is constant.

Settings of DBCP:

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="oracle.jdbc.OracleDriver" />
            <property name="url" value="${batch.jdbc.url}" />
            <property name="username" value="******" />
            <property name="password" value="******" />
            <property name="connectionProperties" value="defaultRowPrefetch=10000;defaultBatchValue=200;" />
            <property name="minIdle" value="10" />
             <property name="maxIdle" value="12" />
            <property name="maxActive" value="100" />
            <property name="accessToUnderlyingConnectionAllowed" value="true" />
            <property name="initialSize" value="${batch.jdbc.pool.size}"/>

            <property name="validationQuery" value="select 1 from dual" />
            <property name="validationQueryTimeout" value="5" />
            <property name="timeBetweenEvictionRunsMillis" value="120000" />
            <property name="minEvictableIdleTimeMillis" value="60000" />             
            <property name="testOnBorrow" value="true" /> 
        </bean>

Suspect from Eclipse MAT report

One instance of "org.apache.commons.pool.impl.GenericObjectPool" loaded by "org.springframework.boot.loader.LaunchedURLClassLoader @ 0x7fc1d90124c8" occupies 1,421,543,264 (94.69%) bytes. The memory is accumulated in one instance of "org.apache.commons.pool.impl.GenericObjectPool" loaded by "org.springframework.boot.loader.LaunchedURLClassLoader @ 0x7fc1d90124c8".

0

There are 0 answers