Tomcat:查看使用数据库连接池的线程

时间:2012-07-09 08:27:26

标签: tomcat monitoring apache-commons-dbcp

Tomcat有一个数据库连接池(DBCP),可以更快地发出请求。

在我的应用程序中,太多的连接被使用了太长时间,我怀疑是泄漏(连接没有正确关闭),我需要找出泄漏的位置。

问题:如何找出使用连接的每个线程的名称?

最好是现场JMX MBean,但也欢迎其他提示。显示每个线程的堆栈跟踪或类名也是可以接受的。

注意:我不是在寻找显示DBCP设置的MBean。我想知道每个连接的用途。

2 个答案:

答案 0 :(得分:8)

遗憾的是,这样的豆子不存在。

可以做的是在您的DBCP配置中启用logAbandoned设置。有关详细信息,请查看Apache Commons-DBCP(http://commons.apache.org/dbcp/configuration.html)的文档:您可以使用Tomcat中<Resource>元素中的所有配置选项。

logAbandoned将告诉您哪个Connection已经检出了未及时返回的池。这可能表示连接泄漏,或只是长时间运行的查询。

更新2015-12-15

使用Tomcat的tomcat-pool,您可以附加拦截器,例如SlowQueryReport或,以通过JMX获取通知,SlowQueryReportJmx

这些工具可能比您从Apache Commons-DBCP获得的更基本的信息做得更好。

答案 1 :(得分:8)

在克里斯托弗的回答中,我创建了一个监视借用/释放连接的工具:

https://github.com/nicolas-raoul/Commons-DBCP-monitoring

它监视Commons DBCP的使用情况,并允许用户创建这样的图表:

enter image description here

enter image description here

这使得识别哪些线程长时间保持连接非常容易。