getCanonicalHostName非常慢

时间:2017-10-31 09:13:31

标签: java ip-address hostname

InetAddress.getByName(ipAddress).getLocalHost().getCanonicalHostName();

以上行大约需要10秒才能执行。

我在etc \ hosts文件中添加了IP和主机名,但仍然没有变化。

getCanonicalHostName如何工作?我可以获得该方法的实现吗?

如何提高这一行代码的效率?

2 个答案:

答案 0 :(得分:0)

在我的情况下,问题是由Npcap驱动程序引起的,该驱动程序用于Wireshark。在Windows Npcap Loopback Adapter中禁用Control Panel\Network and Internet\Network Connections可以解决我的9秒延迟。

延迟本身发生在Inet6AddressImpl.getHostByAddr(byte[] addr)方法中(由InetAddress.getCanonicalHostName()调用),该方法是本机的,因此很难说出与DNS相关的其他情况。

答案 1 :(得分:0)

当我调查窗户上的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