gpt4 book ai didi

mysql - 连接已经关闭

转载 作者:可可西里 更新时间:2023-11-01 07:32:26 25 4
gpt4 key购买 nike

我正在使用 Grails 2.5.3 和 Tomcat7,在应用程序部署 8 小时后,我们的日志开始爆炸,出现连接已关闭的问题。一个很好的假设是 MySql 在默认的 8 小时等待时间后终止连接。

通过文档,我的池似乎配置正确以保持空闲连接打开,但事实并非如此。

我的连接池设置可能有什么问题?

dataSource {
pooled = true
url = 'jdbc:mysql://******.**********.us-east-1.rds.amazonaws.com/*****'
driverClassName = 'com.mysql.jdbc.Driver'
username = '********'
password = '******************'
dialect = org.hibernate.dialect.MySQL5InnoDBDialect
loggingSql = false
properties {
jmxEnabled = true
initialSize = 5
timeBetweenEvictionRunsMillis = 10000
minEvictableIdleTimeMillis = 60000
validationQuery = "SELECT 1"
initSQL = "SELECT 1"
validationQueryTimeout = 10
testOnBorrow = true
testWhileIdle = true
testOnReturn = true
testOnConnect = true
removeAbandonedTimeout = 300
maxActive=100
maxIdle=10
minIdle=1
maxWait=30000
maxAge=900000
removeAbandoned="true"
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.StatementCache;"

}
}

hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=true
cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory'
}

另外,我已经确认运行时的dataSource是(org.apache.tomcat.jdbc.pool.DataSource)

的一个实例

更新 1(未修复)我们认为我们可能已经找到了问题所在!我们在 http session 中存储了一个域类,在阅读了一些关于 session 工厂如何工作的内容后,我们相信存储的 http 对象以某种方式绑定(bind)到一个连接。当用户在 8 小时后从 http session 访问域类时,我们认为休眠存储了对死连接的引用。它现在正在生产中,我们正在监控。

更新 2(已修复)我们终于找到了问题所在。删除 removeAbandoned 和 removeAbandonedTimeout 解决了我们所有的问题。我们不完全确定为什么这会解决问题,因为我们的假设是这两个属性的存在是为了防止发生的事情。唯一的想法是我们的​​数据库更积极地管理废弃的连接。 4 周多了,没有任何问题。

最佳答案

我在完全不同的设置中遇到过这个问题。实在不好相处。基本上可以归结为:

  1. 当 Java 正在执行某种“其他”处理时,您在应用程序的某处有一些连接。这是一个非常基本的重现方法:

    Connection con =(从池中获取连接);
    sleep (330 秒);
    con.close();

  2. 代码没有对上面的数据库连接执行任何操作,因此 tomcat 检测到它已被放弃并在 300 秒时将其返回到池中。

  3. 您的应用程序的流量足够高,以至于同一连接(在上述代码中打开和放弃)在应用程序的其他地方的代码的不同部分打开。

  4. 要么原始代码达到 330 秒并关闭连接,要么新代码获取连接并完成并关闭它。此时有两个地方使用同一个连接,其中一个已经关闭了它。

  5. 使用相同连接的代码的其他位置然后尝试使用或关闭相同连接

  6. 连接已经关闭。产生上述错误。

建议的修复路径:

使用设置 logAbandoned="true" 查找连接被放弃的位置。

关于mysql - 连接已经关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36314890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com