我正在处理一个非常大但实现很差的项目,我们有一个与Database相关的性能问题。我们使用的是甲骨文,。应用服务器: 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,但问题仍然存在。
发布于 2020-10-08 14:00:27
在不分析应用程序的情况下,我们只能推测为什么会发生这个问题。
自创建了197个连接(超过180个)以来,应用程序似乎已经从池中请求了这么多连接。由于非活动超时没有帮助,因此我们必须假设application.
( A)应用程序确实是在超时期间查询DB。
( B)池恢复了连接,应用程序应该捕获异常并重新尝试
我建议您理解其中一个模块中的代码,以了解连接使用模式。
https://stackoverflow.com/questions/64262014
复制相似问题