【发布时间】:2015-05-13 21:04:21
【问题描述】:
我每 5 分钟监控一次 SQL 数据库的连接。几天来,它会徘徊在 5 个连接(我的空闲)左右,然后突然我达到 50。显然这是一个递归问题,因为我不明白为什么我会在 5 分钟内从 5 跳到 50,流量为零。
我正在使用 Hibernate 4 和 Tomcat,我知道 Hibernate 中的一个问题已在 4.3.2 中进行了修补,但我使用的是 4.3.5
更多详情: 每天晚上 7:13:20 都会发生池空事件……听起来太自动了。我正在使用 Quartz,它每 1 分钟运行一次,但我看不出它们之间的关系。
我的属性:
jmxEnabled = true
initialSize = 5
maxActive = 50
minIdle = 5
maxIdle = 25
maxWait = 10000
maxAge = 10 * 60000
timeBetweenEvictionRunsMillis = 5000
minEvictableIdleTimeMillis = 60000
validationQuery = "SELECT 1"
validationQueryTimeout = 3
validationInterval = 15000
testOnBorrow = true
testWhileIdle = true
testOnReturn = false
jdbcInterceptors = "ConnectionState"
defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED
环境:
- Tomcat 7.0.59
- java 1.7.0 更新76
- SQL Server 2012
更多信息: 我将石英工作频率降低到每 5 分钟一次。当我在应用程序中加载页面/视图时,该事件仍然发生。这大约是晚上 7 点 14 分。 我即将降级到休眠 3。
更新 今天下午 6:50 我在 Tomcat 管理器中重新加载了应用程序,但事件仍然发生。 Thread Dump
【问题讨论】:
-
我删除了 parent->child tomcat 守护进程,现在我只有 10 个适当命名的quartz-workers。
-
你使用的是什么类型的连接池?我发现有时尝试 Hikari 或其他 CP 提供商可以帮助自己调试语句以跟踪这些类型的问题。在测试环境中试一试可能是个好主意。
-
@bphilinyc 除了 tomcat 之外,我还没有尝试过其他提供商。但是,我确实部署到了 QA 环境,但没有遇到同样的问题。非常本地化,很可能是外部的。
标签: hibernate tomcat transactions sql-server-2012 connection-pooling