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]

Reply via email to