0

我有这个奇怪的问题,Web 应用程序通过 JNDI 连接到 AS400 DB2 服务器,从 JNDI 获取连接恰好持续大约 930-960 秒!!!通常需要 4 毫秒才能建立连接,有时它会跨越 15 分钟……它没有关于何时/为什么发生的特殊规则。我们使用的是 JTOpen jt400.jar 驱动程序版本 7.0。

我们已将其设置为池中至少有 20 个空闲连接,池中最大连接数为 200,并且我们曾经有 10 个人同时处理 Web 应用程序,因此一次使用超过 10 个连接的可能性很小..

4

5 回答 5

1

在您的应用程序上启用垃圾收集统计报告。

我的猜测是 JNDI 查找很大并且会触发“stop-the-world”垃圾收集,这对于小池中的大程序需要很长时间。

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

于 2010-09-06T10:37:37.827 回答
0

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

于 2010-09-21T21:06:21.140 回答
0

我会建议几件事来尝试诊断问题:

  1. 首先要做的是在这个冗长的查找过程中监控连接池的状态。这将允许您找出问题是否出在实际的连接检索中。无论您是否正确关闭连接,时间也很重要。例如,您可以为每个用户会话打开一个连接,并且在它过期之前不要关闭它。
  2. 检查您的数据库设置,以确定它们是否与您的连接池设置一致。
  3. 检查您是否锁定了某个级别的数据库。这就是让我之前使用的经过优化的应用程序陷入困境的原因。问题在于审计记录,其中记录了访问应用程序的用户。事务总是超时,因为他们每个人都访问此记录进行更新
于 2010-09-21T16:02:29.650 回答
0

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

于 2010-09-22T18:38:24.053 回答
0

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

要查看您有多少连接,请获取出色的高级查询工具,该工具具有大量视图来监视数据库的状态(谁已连接,他们在做什么,哪些查询挂在死锁中,等等)。是的,它要花钱,但如果它可以为您节省一天搜索错误的时间,那已经是值得的了。

于 2010-09-21T15:31:04.387 回答