JDBC找到未闭合连接的来源?

时间:2013-06-14 16:45:37

标签: java mysql database jdbc connection

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

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

除了手动浏览代码以找到来源之外,您建议我如何找到未关闭连接的来源?

感谢。

3 个答案:

答案 0 :(得分:0)

一种解决方案(不直接)会使用BTrace。您将创建拦截java.sql.connection代码

的脚本

https://kenai.com/projects/btrace

但要求是:

  1. 您要么使用Oracle JDK6 +
  2. 在Solaris上运行Sun JDK5的应用程序。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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