3.4.13的zk版本存在问题。当使用域名作为connectionStr时。并且域名无法解析成功。zk会一直发起重试连接,一个重试连接其实就会占用一个socket文件。zk的逻辑存在问题,老的socket文件没有清理,导致linux下too many files open.
本质问题是,zk清理老的socket file是在 org.apache.zookeeper.ClientCnxnSocket#doTransport方法中。但是如果当域名无法解析时,无法进入到这个方法中,去将cancelkeys对应的fd进行删除。只会去将socket文件进行preClose,不会close.现象就是会存在很多个没有名称的socket文件。