In the case a client is leaking Phoenix/HBase connections it would be helpful to have metrics available on the number of ConnectionQueryServices (ConnectionQueryServicesImpl) instances and who has allocated them.
For the latter, we could get a stacktrace when ConnectionQueryServicesImpls are allocated (should be a relatively rare) and keep a count by hash of the call stack (and save the call stack). Then we need a method to dump the hash to callstack map as a string. This method can be called remotely by JMX when debugging leaks in a live environment. Perhaps after the count of ConnectionQueryServicesImpls goes over a configurable threshold we can also log warnings that dump the counts by hash and callstacks corresponding to those hashes.
Or, we should only have multiple ConnectionQueryServicesImpls if an optional parameter is passed in the JDBC connect string. We could keep counts by that parameter string and dump that instead of call stacks.