从JNDI获取连接> 15分钟!

时间:2010-09-02 08:50:49

标签: java tomcat jndi ibm-midrange jt400

我有这个奇怪的问题,Web应用程序通过JNDI连接到AS400 DB2服务器,从JNDI获取连接的时间大约是930-960秒!!!通常需要4ms才能建立连接,并且有时会跨越15分钟...它没有特殊的规则来确定何时/为什么会发生这种情况。我们正在使用JTOpen jt400.jar驱动程序版本7.0。

我们已将其设置为池中最少20个空闲连接,池中最多200个连接数,并且我们一次有10个人在Web应用程序上工作,因此几乎没有机会利用10个连接一下..

5 个答案:

答案 0 :(得分:1)

启用应用程序的垃圾收集统计信息报告。

我的猜测是JNDI查找很大并且触发了一个“停止世界”的垃圾收集,这对于小池中的大型程序来说需要很长时间。

第二个猜测是您的连接未正确返回到连接池,因此JNDI查找需要 WAIT 才能使连接变老并被丢弃并替换为您的应用程序的新连接然后得到。

答案 1 :(得分:0)

确保在不再需要连接时始终正确关闭连接。否则,您将继续分配越来越多的连接,最终,DB2服务器将停止为您提供更多连接。等待几分钟让现有连接超时并给你那个。

要查看您拥有多少连接,请获取具有大量视图的优秀Advanced Query Tool来监视数据库的状态(谁连接,他们在做什么,哪些查询挂起死锁等等) )。是的,这需要花钱,但如果它能节省你一天的搜索错误,那就已经值得了。

答案 2 :(得分:0)

我会建议一些事情来试图诊断问题:

  1. 要做的第一件事是在这个冗长的查找过程中监视连接池的状态。这将允许您查明问题是否在实际检索连接中。无论您是否正确关闭连接或时间安排也很重要。例如,您可以为每个用户会话打开一个连接,并且在它到期之前不要关闭它。
  2. 检查您的数据库设置,以确定它们是否与您的连接池设置相同。
  3. 检查您是否锁定了数据库级别。这就是我之前使用过的相当优化的应用程序陷入困境的原因。问题在于审计记录,其中记录了访问应用程序的用户。事务一直超时,因为每个事务都访问了此记录以进行更新

答案 3 :(得分:0)

15分钟听起来像是典型的超时持续时间,可能来自配置错误的DNS服务器。您应该尝试ping所有相关系统的主机名。

答案 4 :(得分:0)

阅读一篇关于类似主题的文章。 Java SecureRandom entropy是关于SecureRandom如何实现导致应用程序延迟大约20到30分钟的问题。也许它的一些调试方法可以帮助你解决它。