Hi,
I have following setup: Tomcat 5.5.23 with Oracle database 10.2.0.1.0
with DataSource defined as:
<Resource name="jdbc/db" auth="Container" type="javax.sql.DataSource"
maxActive="50" maxIdle="10" maxWait="10000"
validationQuery="select sysdate from dual" testOnBorrow="true"
username="x" password="x"
driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@10.76.162.21:1532:CAP"
removeAbandoned="true" removeAbandonedTimeout="30"
logAbandoned="true" />
There are several webapps deployed. After some time, depending on usage,
applications get stucked - I mean every request that needs database
connection hangs. Thread dump looks ALWAYS the same:
"http-8080-Processor21" daemon prio=1 tid=0x22aed1d8 nid=0x6958 runnable
[0x20a6c000..0x20a6e7f0]
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at oracle.net.ns.Packet.receive(Unknown Source)
at oracle.net.ns.DataPacket.receive(Unknown Source)
at oracle.net.ns.NetInputStream.getNextPacket(Unknown Source)
at oracle.net.ns.NetInputStream.read(Unknown Source)
at oracle.net.ns.NetInputStream.read(Unknown Source)
at oracle.net.ns.NetInputStream.read(Unknown Source)
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1099)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1070)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:478)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:207)
at
oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:790)
at
oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1039)
at
oracle.jdbc.driver.T4CStatement.executeMaybeDescribe(T4CStatement.java:830)
at
oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1132)
at
oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1272)
- locked <0xac40fc70> (a oracle.jdbc.driver.T4CStatement)
- locked <0x90979730> (a oracle.jdbc.driver.T4CConnection)
at
org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:205)
at
org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.validateConnection(PoolableConnectionFactory.java:328)
at
org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory.validateObject(PoolableConnectionFactory.java:308)
at
org.apache.tomcat.dbcp.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:788)
at
org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool.borrowObject(AbandonedObjectPool.java:74)
at
org.apache.tomcat.dbcp.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)
at
org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
It happens ONLY on this particular environment/setup. So I doubt it's
application's fault.
For testing purposes I have deployed simply webapp, that on request
calls DataSource.getConnection() in a loop until exception occurs. Then
it closes every achieved connection. Just for test. And to my surprise
it helps!
When other apps hang waiting for Connections (confirmed with thread
dump), I issue a request to my testing app, it starts to iterate, then
'org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a
connection, pool exhausted' occurs and everything becomes normal.
Blocked threads are no longer blocked, users can continue their work.
Has anyone got any clues? What and where is wrong?
--
Mikolaj Rydzewski <[EMAIL PROTECTED]>
---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]