我使用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而不用担心主机文件。
有没有人对如何解决这个问题有任何建议?
提前感谢您提供的任何帮助。
答案 0 :(得分:0)
您有一个不稳定的DNS服务器配置。设置一些监控以向系统管理员证明。这可以像带有shell脚本的cron作业一样简单,也可以像Nogios监控系统一样复杂。
当我们从Java5迁移到Java6之前,我们遇到了类似的问题,因为在Java6之前DNS解析的地址被缓存(或者直到JVM停止,以先到者为准)。因此,在Java6过期DNS条目时,我们突然发现了一些片状服务器。
我们之所以知道这个问题是因为反向问题:我们在DNS循环中有冗余的LDAP服务器,当地址永远缓存时,这当然不起作用。