2010-09-02 61 views
0

我有这个奇怪的问题,Web应用程序通过JNDI连接到AS400 DB2服务器,从JNDI获得连接恰好持续约930-960秒!通常需要4ms的时间才能建立连接,并且不时达到15分钟......它没有特定的时间/原因发生的规则。我们正在使用JTOpen jt400.jar驱动程序版本7.0。从JNDI获取连接> 15分钟!

我们已经将其设置为在池中有最少20个空闲连接,最多200个连接池在池中,并且我们使用一次有10个人在web应用程序上工作,所以几乎没有机会利用更多的10次​​连接。

+0

它可能是任何中间防火墙或连接问题,即您可以尝试从同一客户端机器到数据库的sqlplus - 它更快吗? – JoseK 2010-09-02 09:04:48

+0

你确定所有的连接都被servlet关闭了吗?您可能正在某个地方打开某个连接,而不是关闭该连接并等待其超时或出现某种情况。 – Jaydee 2010-09-02 14:37:10

+0

首先是:连接是否正确关闭?是的 - 这是首先检查。它似乎是在循环运行,因为该服务器上的另一个应用程序定期运行,只是想听听其他经验。 – 2010-09-03 05:55:03

回答

1

在应用程序上启用垃圾回收统计报告。

我的猜测是JNDI查找很大,并触发一个“停止世界”的垃圾收集,这需要年龄较大的小池中的程序。

第二种猜测是您的连接没有正确返回到连接池,因此JNDI查找需要WAIT,以便连接变旧并被丢弃并替换为您的应用程序随后获得的新连接。

+0

请澄清一下:如果我调用connection.close()这个连接返回到那个时刻池,不是吗?没有任何其他解决方案来返回JNDI连接,但是这个,也许有一些我不知道的“惊喜”因素......? – 2010-09-06 10:51:29

+0

您的数据库连接可能会过时(例如防火墙关闭空闲实例)。查看数据库池组件中是否有ping功能。 – 2010-09-06 11:43:48

+0

我认为这可能是正确的,我记得我们通过JNDI涉及到LDAP的类似问题,其中池没有正确关闭连接。我相信这是我们使用的默认连接池。 – aperkins 2010-09-21 20:51:16

0

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

要查看您有多少个连接,请获取优秀的Advanced Query Tool,这些连接具有完整的视图以监视数据库的状态(谁连接,他们在做什么,哪些查询处于死锁状态等)。是的,它需要花费,但如果它为您节省了一天的搜索错误,它已经是值得的。

0

我建议两件事情来看待,试图诊断问题:

  1. 首先要做的就是在这个漫长的查找监控连接池的状态。这将使您能够发现问题是否在实际检索连接中。无论您是否正确关闭连接,时间安排也很重要。例如,您可以为每个用户会话打开一个连接,并在其过期之前不要关闭它。
  2. 检查您的数据库设置,以确定它们是否与连接池的设置相符。
  3. 检查您是否锁定了数据库级别。这是之前与之合作过的漂亮调整应用程序的原因。问题出在用户访问应用程序的日志记录。事务每次都访问此记录进行更新时始终超时
0

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

0

只需阅读关于类似主题的文章。 Java SecureRandom entropy是关于SecureRandom实现如何导致应用程序滞后大约20到30分钟。也许有些调试方法可以帮助你把它整理出来。