我是 Oracle DBA,而不是 Java 开发人员或 websphere 专家。我们最近开始在我们的环境中使用 websphere。所以开发人员仍在学习它。所以我可能无法正确表达我的问题。我确实搜索了论坛,并看到了其他 2 个类似的问题。我的问题更多是关于如何解决这个问题。
Websphere 8.5.0.2 Oracle 11.2.0.3
- 我在数据库中看到 20 个打开的连接。都是不活动的。所以他们没有处理。从 oracle 来看,它是 v$session。不活动意味着,你是开放的,没有做任何事情。基本上是闲置的。
- 如果它们处于非活动状态且未处理,则它们应该可供连接池提供给新的请求者,假设 Java 开发人员正在使用的 DAO 在完成时正在关闭(这包括 try/catch 块)。我们确认他正在关闭他的联系。
到目前为止的检查: 1. 我们审查了开发人员的代码。他正在使用标准的 java DAO。他正在关闭他的连接。他有一个 try/catch 块,他在 catch 中做的第一件事就是关闭连接。2.我的假设是这应该涵盖代码路径。
我们没有在日志中看到有关“关闭”连接的任何错误。
我对连接池如何工作的理解 1. 池管理器打开一组可配置的数据库连接。在我们的例子中,它是 20。 2. 当应用程序请求连接时,连接管理器会在池中查找下一个可用连接,然后将指向该连接的指针传递给请求函数。
可能性:1.服务器真的很慢。我们正在使用虚拟机进行开发/测试。我们无法查看服务器以查看它们是否忙碌。因此,另一个 VM 可能正在使用 CPU 或磁盘。尽管对可用连接的查找是轻量级的,但服务器可能会在 100% cpu 时挂起并且我们超时。问题是,我没有办法看这个。没有特权,也没有访问权限的人。
- 不关闭连接:我们检查得很彻底。我们没有看到他没有关闭连接的任何代码通过(包括异常)。他做的第一件事就是关闭连接。
关于在哪里看的任何建议?我认为这是服务器速度慢的问题,但我想排除其他问题。我想再次声明,我不是 Java 开发人员或 websphere 专家。所以我的问题可能措辞不佳。