Hello.
I encountered an issue that looks similar to Bug DBCP-270.
I wish to know:
1) Is it the same bug or a new one?
2) Which patch can I apply and how to apply it?
3) Will setting testWhileIdle="false" avoid the problem?
System info:
Tomcat 6.0.18, CentOS 5.2 64-bit, MySQL Connector/J 5.1.17
(I do not know which version of DBCP is bundled with Tomcat)
The partial thread dump and the JDBC config attached below.
I look forward to your kind assistance. Thank you.
Regards,
Ying Chyn Ng
-----------------------------------------------------------------------
Found one Java-level deadlock:
=============================
"TP-Processor199":
waiting to lock monitor 0x00002aaab043b980 (object 0x00002af7723e3c48, a
org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool),
which is held by "Timer-0"
"Timer-0":
waiting to lock monitor 0x00000000168cf3b0 (object 0x00002af774c8e8b0, a
org.apache.tomcat.dbcp.dbcp.PoolableConnection),
which is held by "TP-Processor14"
"TP-Processor14":
waiting to lock monitor 0x00002aaab043b980 (object 0x00002af7723e3c48, a
org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool),
which is held by "Timer-0"
Java stack information for the threads listed above:
===================================================
"TP-Processor199":
at
org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.getNumIdle(GenericObjectPool.java:1061)
- waiting to lock <0x00002af7723e3c48> (a
org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool)
at
org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:78)
at
org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:96)
at
org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
...
"Timer-0":
at org.apache.tomcat.dbcp.dbcp.AbandonedTrace.addTrace(AbandonedTrace.java:176)
- waiting to lock <0x00002af774c8e8b0> (a
org.apache.tomcat.dbcp.dbcp.PoolableConnection)
at org.apache.tomcat.dbcp.dbcp.AbandonedTrace.init(AbandonedTrace.java:92)
at org.apache.tomcat.dbcp.dbcp.AbandonedTrace.<init>(AbandonedTrace.java:82)
at
org.apache.tomcat.dbcp.dbcp.DelegatingStatement.<init>(DelegatingStatement.java:61)
at
org.apache.tomcat.dbcp.dbcp.DelegatingConnection.createStatement(DelegatingConnection.java:224)
at
org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:331)
at
org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.validateObject(PoolableConnectionFactory.java:312)
at
org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.evict(GenericObjectPool.java:1217)
...
"TP-Processor14":
at
org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.addObjectToPool(GenericObjectPool.java:1137)
- waiting to lock <0x00002af7723e3c48> (a
org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool)
at
org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.returnObject(GenericObjectPool.java:1076)
at
org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool.returnObject(AbandonedObjectPool.java:112)
at
org.apache.tomcat.dbcp.dbcp.PoolableConnection.close(PoolableConnection.java:87)
- locked <0x00002af774c8e8b0> (a
org.apache.tomcat.dbcp.dbcp.PoolableConnection)
at
org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:181)
...
----------------------------------------------------------------
JDBC configuration
<Resource name="jdbc/GRID_DS_MYSQL" auth="Container"
type="javax.sql.DataSource"
maxActive="450" maxIdle="50" maxWait="10000"
removeAbandoned="true" removeAbandonedTimeout="120"
validationQuery="Select 1" testOnBorrow="true" testWhileIdle="true"
timeBetweenEvictionRunsMillis="10000" minEvictableIdleTimeMillis="60000"
driverClassName="com.mysql.jdbc.Driver" username="grid"
password="q1w2e3r4"
url="jdbc:mysql://localhost:3306/gridbackend?autoReconnect=true"
/>