簡體   English   中英

getCanonicalHostName 很慢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM