1 问题
windows下zookeeper客户端启动特别慢,要9秒以上。
环境:
windows 8.1 64-bit
版本:
<dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>3.3.0</version> </dependency>
测试代码:
String conStr1 = "127.0.0.1:2181"; CuratorFramework client = CuratorFrameworkFactory.newClient(conStr1, new RetryNTimes(10, 5000)); long beginTime = System.currentTimeMillis(); // 连接, 这一步非常慢 client.start(); System.out.println("耗时:" + (System.currentTimeMillis() - beginTime));
耗时要9秒以上。
2 分析
使用jvisualvm.exe的cpu采样之后,发现java.net.InetAddress.getCanonialHostName()慢。它占用了97%的时间。如下图所示:
为何java.net.InetAddress.getCanonialHostName()这么慢呢?
经过一番排查之后,发现是Npcap引起的。在网络连接中可以发现2个跟Npcap相关的适配器,如下所示:
3 解决方案
将本项目不会用到的网络适配器条目禁用掉,只保留会用到的。
注意事项:
- Npcap loopback适配器和KM-TEST环回适配器是我在安装Wireshark时被安装的,禁用掉这2项,会导致Wireshark环回抓包功能失败。
4 效果
重新运行了测试代码,发现时间只要200毫秒。