执行摘要
resolv.conf
如果第一个失败或超时,Java 是否会查询下一个名称服务器条目?- Java 将考虑解析器“关闭”的默认超时是多少?
细节
在/etc/resolv.conf
大多数站点中,配置了多个 DNS 服务器供系统使用。如果列表中的第一个 DNS 服务器出现故障,任何人都可以澄清使用 Java 会发生什么吗?例如,想象以下情况resolv.conf
:
nameserver 8.8.8.8
nameserver 4.4.4.4
如果 8.8.8.8 变得无法访问,那么 Java 会尝试 4.4.4.4 吗?根据我们的经验,它没有 - 我们看到许多线程在等待解析 DNS 名称,即使备份 DNS 服务器是可访问的。
在 Linux 上,java 会将主机名解析委托给进行实际解析的底层 C 系统库。
在查询 /etc/nsswitch.conf 中指定的其他信息源之后,将按照 /etc/resolv.conf 中指定的顺序查询名称服务器(想想 /etc/hosts,但可能是 NIS 或 LDAP)。
您可以在 /etc/resolv.conf 中指定超时值,根据手册页,默认值为 5 秒。
如果您的第一个服务器提供有效的错误代码即 servfail,则不会查询第二个名称服务器
作为一个程序(任何进程,包括 JVM)有它的第一个 DNS 请求,它默认读取并永久缓存其全部内容
/etc/resolv.conf
。它以后永远不会刷新该信息,即使遇到完全 DNS 故障也是如此。该程序需要对一些特定的系统调用进行编程,以便以更用户友好的方式运行。这个 SO question解释了细节。我怀疑您
/etc/resolv.conf
在 JVM 运行时进行了编辑。重新启动它。