最近开发环境使用过程当中遇到hbase RegionServer 存在过多的zookeeper连接,出先连接泄漏问题。通过jmap命令查看内存信息发现是在zookeeper连接被HRegion当中某些对象保存起来没有释放掉,使用jstack查看当前进程堆栈信息,发现compaction调用了phoenix中代码,如图所示
查找源码发现在DefaultStatisticsCollector类的initGuidepostDepth出代码为
htable是HTableInterface的实现类对象,查看源码发现该对象在创建时需要生产一个RegionCoprocessHConnection对象,该对象父类HConnectionImplementation当中引用了类ZookeeperKeepAliveConnection 对象引用,该类是hbase对zookeeper的封装类,调用HConnectionImplementation当中的getKeeperAliveZookeeperWatcher方法后会将Zo