好吧,这是一个场景:
我正在使用Java,并且我有一个集中的类来连接和断开数据库。我将我的ComboPooledDataSource的最大池大小设置为30 (cpds.setMaxPoolSize(30)),没有特殊原因。MySQL将time_wait配置设置为100秒。
我的问题是:
当运行我的程序并将其日志与MySQL中生成的日志进行比较时,我可以清楚地看到MySQL正在做它应该做的事情:在100秒后关闭休眠连接(这正是我的程序创建的连接)。但在MySQL中关闭的相同连接在我的C3P0连接池中似乎仍然有效,因为连接的数量只会增加(每次需要使用cpds.getNumConnections()建立新连接时,我都会对其进行测试)。
在c3p0中,有没有办法清理未使用的连接(在MySQL中关闭的连接)?因为很快就会达到我的最大连接数(200s - 300s)。在c3p0中,MySQL关闭的连接不会自动关闭吗?
发布于 2015-09-04 03:04:19
C3P0提供了许多超时参数。有关详细信息,请查看他们的文档:http://www.mchange.com/projects/c3p0/#basic_pool_configuration
特别是关于“管理池大小和连接年限”的部分,您将会感兴趣。以下是您可以调整的一些设置: maxConnectionAge、maxIdleTime、maxIdleTimeExcessConnections
发布于 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控制打开的连接的数量。
(您仍然希望配置某种形式的连接测试,但几乎总是如此。)
https://stackoverflow.com/questions/32383209
复制相似问题