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毫秒。