Our J2SE webapp using iBatis with SimpleDataSource running in Apache Tomcat 
occasionally starts to hang. It hits the roof of max. Nr. of threads and 
looking at the thread dump, there are many threads that seem blocked trying to 
get and return(!) connections from and to the pool:

"TP-Processor406" daemon prio=10 tid=0x005fbc00 nid=0xda4 waiting for monitor 
entry [0x7ce7f000..0x7ce81788]
   java.lang.Thread.State: BLOCKED (on object monitor)
 at 
com.ibatis.common.jdbc.SimpleDataSource.pushConnection(SimpleDataSource.java:521)
  - waiting to lock <0x9e9d37f0> (a java.lang.Object)
 at com.ibatis.common.jdbc.SimpleDataSource.access$100(SimpleDataSource.java:52)
 at 
com.ibatis.common.jdbc.SimpleDataSource$SimplePooledConnection.invoke(SimpleDataSource.java:954)
 at $Proxy21.close(Unknown Source)
[...]

It almost looks to me as if SimpleDataSource blocks threads from returning 
connections to the pool, while other threads are trying to get connections from 
it - some kind of deadlock scenario?

Assuming that my observation is wrong, I wonder if our configuration is good. 
We currently have:

iBatis settings

        maxRequests="128"
        maxSessions="64"
        maxTransactions="64"

and datasource settings

        maxActive=50
        maxIdle=15

Isn't maxTransactions too high? Besides the rules pointed out in the 
documentation, are there rules on how these settings should relate to the 
datasource settings? Something like maxActive should be at least maxSessions or 
something like that?

Would these settings be any good?

        maxRequests="320"
        maxSessions="64"
        maxTransactions="32"

Torsten

Reply via email to