【发布时间】:2021-01-23 11:17:59
【问题描述】:
我正在处理一个非常大但实施不佳的项目,我们遇到了一个与 de Database 相关的大性能问题。 我们正在使用 Oracle、exadata 和 bla bla bla。 应用服务器:tomcat 潜水员:ojdbc6
接下来的配置:
<property name="connectionCachingEnabled" value="true" />
<property name="connectionCacheProperties">
<value>
MinLimit:180
MaxLimit:200
InitialLimit:50
ConnectionWaitTimeout:120
InactivityTimeout:180
....
该应用程序有近 15 个独立运行的模块,但也有一些模块包含其他模块并使用它们的数据源。
是的,我知道……你在想什么。当我到达时它已经是这样了,我需要修补它,同时团队正在努力工作 再造
问题是这 15 个模块应该占用 200 个连接,但是对于这个意大利面条,每个模块还占用包含的模块连接。
这是一个连接汤!
但在这一点上,问题是某些模块无法获取它们的 200 个连接,因为数据库没有更多资源,所以.... 与“ConnectionWaitTimeout”配置相关,它返回一个漂亮的 null 到池中,并带有下一条消息:
无法为事务打开 JDBC 连接;嵌套异常是 java.lang.IllegalArgumentException:连接不能为空
检查数据库大部分模块需要 200 个连接,但只有 7 个活动和 197 个不活动。
我找不到合适的配置来释放不活动的配置。
我使用了 InactivityTimeout 和 AbandonedConnectionTimeout,但问题仍然存在。
【问题讨论】:
-
MinLimit:180听起来好像池将始终打开至少 180 个连接(并将保持它们打开)。是否将其设置为例如5 改变什么? -
当我们把它改成较低的值,结果是一样的