0

我在项目中的某个地方遇到问题,与 mysql 的多个连接没有关闭,导致我的应用程序在几天后变得非常慢,基本上迫使我重新启动我的应用程序服务器。

为了找到这个问题的根源,我创建了一个映射,其中键是建立连接的类和方法名称,并且作为值,每次该方法建立/关闭连接时计数都会增加和减少,我以为这会让我看到与数据库建立连接的哪种方法会打开很多连接,结果证明这是不准确的。

除了手动通过代码查找源之外,您建议我做什么来查找未关闭连接的源?

谢谢。

4

3 回答 3

0

使用可以捕获废弃连接的连接池,例如 Apache DNCP。

于 2013-06-15T01:22:16.283 回答
0

一种解决方案(不是直截了当的)是使用 BTrace。您将创建拦截java.sql.connection代码的脚本

https://kenai.com/projects/btrace

然而,要求是:

  1. 要么你会使用 Oracle JDK6+
  2. 或者在 Solaris 上使用 Sun JDK5 运行应用程序。
于 2013-06-14T17:15:19.560 回答
0

您可以使用aspectj各种方法(DriverManager.getConnection等)添加跟踪/日志记录/拦截器。

但是我建议集中你的连接管理,并注意正确处理异常(即使这可以集中)。

于 2013-06-14T17:19:58.780 回答