首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C3P0持有的连接数与MySQL中的休眠连接数不匹配

C3P0持有的连接数与MySQL中的休眠连接数不匹配
EN

Stack Overflow用户
提问于 2015-09-04 02:43:38
回答 2查看 673关注 0票数 2

好吧,这是一个场景:

我正在使用Java,并且我有一个集中的类来连接和断开数据库。我将我的ComboPooledDataSource的最大池大小设置为30 (cpds.setMaxPoolSize(30)),没有特殊原因。MySQL将time_wait配置设置为100秒。

我的问题是:

当运行我的程序并将其日志与MySQL中生成的日志进行比较时,我可以清楚地看到MySQL正在做它应该做的事情:在100秒后关闭休眠连接(这正是我的程序创建的连接)。但在MySQL中关闭的相同连接在我的C3P0连接池中似乎仍然有效,因为连接的数量只会增加(每次需要使用cpds.getNumConnections()建立新连接时,我都会对其进行测试)。

在c3p0中,有没有办法清理未使用的连接(在MySQL中关闭的连接)?因为很快就会达到我的最大连接数(200s - 300s)。在c3p0中,MySQL关闭的连接不会自动关闭吗?

EN

回答 2

Stack Overflow用户

发布于 2015-09-04 03:04:19

C3P0提供了许多超时参数。有关详细信息,请查看他们的文档:http://www.mchange.com/projects/c3p0/#basic_pool_configuration

特别是关于“管理池大小和连接年限”的部分,您将会感兴趣。以下是您可以调整的一些设置: maxConnectionAge、maxIdleTime、maxIdleTimeExcessConnections

票数 3
EN

Stack Overflow用户

发布于 2015-09-06 04:26:16

MySQL没有time_wait参数。time_wait是一种TCP连接状态。

如果您将wait_timeout设置为100 (覆盖其默认值28800),则是在自找麻烦。像c3p0这样的连接池的全部意义在于保持连接打开,以便它们可以被重用。

c3p0可以通过连接测试来检测和观察数据库管理系统何时从其下面关闭了连接。请参阅http://www.mchange.com/projects/c3p0/#configuring_connection_testing

如果你真的希望你的MySQL在100秒后终止你的连接,并且你想让c3p0注意到这一点,你可以将c3p0的idleConnectionTestPeriod设置为30左右,c3p0会快速检测并处理失效的连接。但是,当连接数低于minPoolSize时,它将重新创建失效的连接,并且您的应用程序将无用地搅动。一个更好的方法是让MySQL的wait_timeout保持较大,并使用maxPoolSize控制打开的连接的数量。

(您仍然希望配置某种形式的连接测试,但几乎总是如此。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32383209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档