A huge webapp in my Tomcat sometimes starts using too many DBCP connections, leading to problems.
To investigate, I want to know precisely at each point in time what thread/method is holding a connection of the pool. Does not need to be real-time, post-mortem analysis is OK.
I have been looking for such a DBCP monitoring tool, in vain, so I am about to write mine.
(if there is any interest I can make it open source)
Here is my plan:
- Modify PoolingDataSource.getConnection to log "
DBCP+1 <thread-id>
" - Modify DelegatingConnection.close to log "
DBCP-1 <thread-id>
" - Write a small script to generate this simple CSV for visualization:
QUESTION:
Am I missing some Commons-DBCP 1.4 concept that makes the idea invalid?
Or am I re-inventing the wheel?