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

Nic*_*oul 4 monitoring tomcat apache-commons-dbcp

Tomcat有一个数据库连接池(DBCP)来更快地发出请求.

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

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

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

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

Chr*_*ltz 8

遗憾的是,这样的bean不存在.

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

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

更新2015-12-15

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

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


Nic*_*oul 8

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

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

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

在此输入图像描述

在此输入图像描述

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