【问题标题】:JDBC finding the source of unclosed connections?JDBC找到未关闭连接的来源?
【发布时间】:2013-06-11 09:30:28
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • 这不是一个答案而是一个建议,你为什么不创建一个连接池并从中选择一个连接,它会比打开和关闭连接更干净。
  • 请提供有关您如何创建连接的更多详细信息。从单个组件创建的连接是否有自己的打开/关闭连接代码?您是否在使用某些框架(可能不是很高)。您可能需要提供一些示例代码。

标签: java mysql database jdbc connection


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      https://kenai.com/projects/btrace

      然而,要求是:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-03
        • 1970-01-01
        • 2012-08-28
        • 1970-01-01
        • 2011-07-07
        • 2011-06-23
        • 2019-08-16
        • 1970-01-01
        相关资源
        最近更新 更多