com.ibm.websphere.ce.cm.ConnectionWaitTimeoutException:DBA无法提供连接

时间:2013-05-22 15:53:58

标签: websphere websphere-8

我是Oracle DBA,而不是java开发人员或websphere专家。我们最近开始在我们的环境中使用websphere。所以开发人员仍在学习它。所以我可能不会正确地说出我的问题。我确实搜索了论坛,并看到了其他2个问题。我的问题更多是关于如何解决这个问题。

Websphere 8.5.0.2 Oracle 11.2.0.3

  1. 我在数据库中看到20个打开的连接。一切都不活跃。所以他们没有处理。从oracle开始,它是v $ session。无效意味着,你是开放的,没有做任何事情。基本上它是空闲的。
  2. 如果它们处于非活动状态且未处理,则它们应该可用于连接池以提供给新请求者,假设Java开发人员正在使用的DAO在完成时被关闭(这包括try / catch块)。我们确认他正在关闭他的关系。
  3. 目前检查: 1.我们审查了开发人员代码。他正在使用标准的Java DAO。他正在关闭他的联系。他有一个try / catch块,他在catch中做的第一件事是关闭连接。 我的假设是这应该涵盖代码路径。

    我们在日志中没有看到任何关于关闭'一个连接。

    我对连接池如何工作的理解 1.池管理器打开一组可配置的数据库连接。在我们的例子中它是20。 2.当应用程序请求连接时,连接管理器会为下一个可用连接查找池,然后将指向该连接的指针传递给请求函数。

    可能性: 1.真的很慢的服务器。我们正在使用VM进行开发/测试。我们无法查看服务器以查看它们是否正忙。因此,另一个VM可能正在耗尽CPU或磁盘。 虽然可用连接的查找重量很轻,但服务器可能挂起100%cpu并且我们超时。问题是,我没有办法看到这个。没有特权,也没有访问权限的人。

    1. 没有关闭连接:我们检查得非常彻底。我没有看到他没有关闭连接的任何代码传递(包括例外)。他在捕获中做的第一件事是关闭连接。
    2. 关于在哪里看的任何建议?我认为这是一个慢速服务器的问题,但我想排除其他的东西。我想再次声明我不是java开发人员或websphere专家。所以我的问题措辞可能很差。

2 个答案:

答案 0 :(得分:2)

  

他在捕获中做的第一件事是关闭连接

让开发人员在catch块之后引入 finally block 并在finally块中关闭连接,而不是catch块。只有在出现错误的情况下,Flow才会移动捕获,但在正常流程中,连接不会很快释放。

try {
//do something 
}
catch(Exception ex) {
// log error
}
finally {
//close connection here
}

答案 1 :(得分:0)

您描述的症状表明连接泄漏。泄漏很容易解决(请参阅ad-inf的回复),但很难找到泄漏源。幸运的是,WAS带有ConnLeakLogic机制。启用它后,在trace.log中,您将找到与应用程序从池中检索到的连接相关的条目,并且未在较长时间内返回。该连接信息还将从获取连接时打印Java线程的堆栈跟踪。看到堆栈跟踪,Java开发人员应该能够识别有问题的代码。