java.net.UnknownHostException - 间歇性问题

时间:2011-06-06 12:06:20

标签: java

我使用Java 1.6.0_17编写了一个用Java编写的Web服务 其中一项服务消失,屏幕上的另一台服务器使用以下代码:

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();

InputStream stream = connection.getInputStream();

return convertStreamToString(stream);

在大多数情况下,大约80%的时间(非常粗略的猜测)这似乎工作正常但是其余的时间我得到以下异常当我到达connection.connect()部分代码:

java.net.UnknownHostException: {my server name was here}
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:525)
at java.net.Socket.connect(Socket.java:475)

我在上面的日志中用{my server name was here}替换了我们服务器的URL。 我能够运行nslookup并且服务器解析得很好。

Web服务在Windows 2003 Standard x64 Edition Service Pack 2服务器上的JBoss 4.2.3服务器上运行。

我知道Unknownhost异常意味着服务器名称无法解析,但我正在努力解决为什么这种情况会间歇性地发生。 我宁愿不通过主机文件解析主机名,因为将来当我们更改主机时,我希望能够更改DNS而不用担心主机文件。
有没有人对如何解决这个问题有任何建议? 提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

您有一个不稳定的DNS服务器配置。设置一些监控以向系统管理员证明。这可以像带有shell脚本的cron作业一样简单,也可以像Nogios监控系统一样复杂。

当我们从Java5迁移到Java6之前,我们遇到了类似的问题,因为在Java6之前DNS解析的地址被缓存(或者直到JVM停止,以先到者为准)。因此,在Java6过期DNS条目时,我们突然发现了一些片状服务器。

我们之所以知道这个问题是因为反向问题:我们在DNS循环中有冗余的LDAP服务器,当地址永远缓存时,这当然不起作用。