我在项目中的某个地方遇到问题,与 mysql 的多个连接没有关闭,导致我的应用程序在几天后变得非常慢,基本上迫使我重新启动我的应用程序服务器。
为了找到这个问题的根源,我创建了一个映射,其中键是建立连接的类和方法名称,并且作为值,每次该方法建立/关闭连接时计数都会增加和减少,我以为这会让我看到与数据库建立连接的哪种方法会打开很多连接,结果证明这是不准确的。
除了手动通过代码查找源之外,您建议我做什么来查找未关闭连接的源?
谢谢。
我在项目中的某个地方遇到问题,与 mysql 的多个连接没有关闭,导致我的应用程序在几天后变得非常慢,基本上迫使我重新启动我的应用程序服务器。
为了找到这个问题的根源,我创建了一个映射,其中键是建立连接的类和方法名称,并且作为值,每次该方法建立/关闭连接时计数都会增加和减少,我以为这会让我看到与数据库建立连接的哪种方法会打开很多连接,结果证明这是不准确的。
除了手动通过代码查找源之外,您建议我做什么来查找未关闭连接的源?
谢谢。
使用可以捕获废弃连接的连接池,例如 Apache DNCP。
一种解决方案(不是直截了当的)是使用 BTrace。您将创建拦截java.sql.connection
代码的脚本
https://kenai.com/projects/btrace
然而,要求是:
您可以使用aspectj
各种方法(DriverManager.getConnection
等)添加跟踪/日志记录/拦截器。
但是我建议集中你的连接管理,并注意正确处理异常(即使这可以集中)。