We're running a spring/hibernate/c3p0 application under load. When I reduce the c3p0 maxPoolSize to some far, far lower than the number of concurrent users, our application just hangs. There are no error messages in the log, but it doesn't proceed forward either.
I expect the application to slow down, but not to stop altogether.
Here is our c3p0 configuration:
<bean id="coreDataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close"
p:driverClass="${core.jdbc.driver}"
p:jdbcUrl="${core.jdbc.url}"
p:user="${core.jdbc.user}"
p:acquireIncrement="5"
p:acquireRetryAttempts="10"
p:acquireRetryDelay="5000"
p:initialPoolSize="52"
p:maxIdleTime="3600"
p:maxIdleTimeExcessConnections="300"
p:minPoolSize="52"
p:maxPoolSize="125"
p:numHelperThreads="6"
p:unreturnedConnectionTimeout="0">
<property name="password">
<bean class="com.docfinity.util.encryption.SpringStringDecrypter"
p:decryptFlag="${core.jdbc.decryptPasswordFlag}"
p:encryptedString="${core.jdbc.password}" />
</property>
</bean>
This will lock up if I throw a 160 users at it.
I tried setting unreturnedConnectionTimeout to something positive (120 seconds), and looked at the stack traces that show up in our application. The stack traces are from various different methods in our application. It's not like there's one method we can point to and say that it's leaking connections.
Any help debugging this issue would be most appreciated.