为什么睡眠模式连接不被c3p0重用?

时间:2014-06-27 11:59:55

标签: java mysql connection-pooling c3p0

我使用Spring MVC + MySQL开发Web应用程序。为了管理JDBC连接,我使用c3p0进行连接池。

如果我正在使用c3p0,我想如果,5个连接在池中打开,并且所有5个连接都处于睡眠模式,如果我从java请求getConnection(),那么其中一个应该返回为{{1 }}。我是对的吗?

如果是,那么请考虑以下负载测试场景,我将获得异常Connection。使用Connections could not be acquired from the underlying database!我在15秒内开始为250个用户加载测试。我使用Jmeter持续观察数据库连接,前几分钟一切都进展顺利,但因为投入到Web服务器连接数的所有250个用户计数达到500,这是我们的SHOE FULL PROCESSLIST。所以在此之后我们得到maxPoolSize

此时如果我执行Connections could not be acquired from the underlying database!,那么我可以看到所有500个连接都处于睡眠模式。如果我在上面的语句中是正确的,那么处于睡眠模式的任何打开连接都将由c3p0返回。 那我为什么会得到这个例外。?

这是我的c3p0属性

SHOE FULL PROCESSLIST

更新

我在MINPOOLSIZE=10 ACQUIREINCREMENT=1 MAXPOOLSIZE=500 INITIALPOOLSIZE=10 NUMBERHELPERTHREAD=100 MAXIDLETIME=10 MAXSTATEMENT=20 MAXSTATEMENTPERCONNECTION=5 IDLECONNECTIONTESTPERIOD=120 ACQUIRERETRYATTEMPT=10 ACQUIRERETRYDELAY=100 AUTOCOMMITONCLOSE=false BREAKAFTERACQUIREFAILURE=false TESTCONNECTIONONCHECKOUT=true TESTCONNECTIONONCHECKIN=true 例外

之前发现了此警告
Connections could not be acquired from the underlying database!

0 个答案:

没有答案