[英]getCanonicalHostName is very slow
InetAddress.getByName(ipAddress).getLocalHost().getCanonicalHostName();
上面一行大約需要 10 秒才能執行。
我在 etc\\hosts 文件中添加了 IP 和主機名,但仍然沒有變化。
getCanonicalHostName 如何工作? 我可以獲得該方法的實現嗎?
如何提高這行代碼的效率?
就我而言,問題是由我用於 Wireshark 的Npcap驅動程序引起的。 在 Windows Control Panel\\Network and Internet\\Network Connections
禁用Npcap Loopback Adapter
修復了我的 9 秒延遲。
延遲本身發生在Inet6AddressImpl.getHostByAddr(byte[] addr)
方法(由InetAddress.getCanonicalHostName()
調用)中,該方法是本機的,因此除了與 DNS 相關之外,很難說發生了什么。
當我調查 Windows 上 apache zookeeper 的緩慢啟動時,我遇到了同樣的問題。 zookeeper 嘗試獲取非常慢的 getCanonicalHostName。 所以我測試了下面的代碼。 第一個日志將輸出將獲得主機名的ip。 我發現 ip(192.168.56.1)不在我的主機文件(C:\\Windows\\System32\\drivers\\etc\\hosts)中。
InetAddress localHost = InetAddress.getLocalHost();
log.info(localHost);
String canonicalHostName = localHost.getCanonicalHostName();
log.info(canonicalHostName);
所以我在hosts文件中添加了以下行,慢的問題就消失了。
192.168.56.1 ip.of.vm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.