我的 Tomcat 中的一个巨大的 webapp 有时会开始使用太多的 DBCP 连接,从而导致问题。
为了进行调查,我想在每个时间点准确地知道哪个线程/方法正在持有池的连接。不需要是实时的,事后分析就可以了。
一直在找这样的DBCP监控工具,无果,所以准备写我的。
(如果有兴趣我可以开源)
这是我的计划:
- 修改PoolingDataSource.getConnection以记录“
DBCP+1 <thread-id>
” - 修改DelegatingConnection.close以记录“
DBCP-1 <thread-id>
” - 编写一个小脚本来生成这个简单的 CSV 用于可视化:
问题:
我是否遗漏了一些使该想法无效的 Commons-DBCP 1.4 概念?
还是我在重新发明轮子?