2013-08-05 53 views
2

在一個web項目中。
我看到日誌:一個奇怪的UnknownHostException

hadoop.hbase.zookeeper.ZKConfig - java.net.UnknownHostException: example.com 
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) 
at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:850) 
at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1201) 
at java.net.InetAddress.getAllByName0(InetAddress.java:1154) 
at java.net.InetAddress.getAllByName(InetAddress.java:1084) 
at java.net.InetAddress.getAllByName(InetAddress.java:1020) 
at java.net.InetAddress.getByName(InetAddress.java:970) 

但是當我平example.com,沒關係,我也的telnet example.com 2181成功! 我發現similar question 所以我運行DomainResolutionTest在我的服務器的java DomainResolutionTest example.com
但沒關係!

ENV:

java -version 

Java版本 「1.6.0_25」
的Java(TM)SE運行時環境(建立1.6.0_25-B06)
的HotSpot的Java(TM)64位服務器VM(構建20.0-B11,混合模式)

os:Red Hat Enterprise Linux Server release 5.7

我很好奇,爲什麼是Inet6AddressImpl,我認爲這可能是Inet4AddressI mpl

如何解決?
原因是什麼?

+0

它是否可重複?這可能只是一個臨時的DNS失敗。 –

+1

如果你對ipv6有問題,你可以指定一些jvm標誌來強制使用ipv4。 – JIV

+0

@RobinGreen,每次出現都是可重複的。 – fuyou001

回答

4

我有同樣的例外,並通過在/ etc/hosts中爲'localhost'條目手動設置我的主機名來解決它。

127.0.0.1  localhost DL006285-linux 

# special IPv6 addresses 
::1    localhost ipv6-localhost ipv6-loopback DL006285-linux 
1

有可能是在給子網價值的程序問題。 在傳遞給程序之前,我通過修剪子網值給出了子網值。

subnet = subnet.trim(); 
int timeout = 1500; 
for(int i=1;i<254;i++) 
     { 
     try 
      { 
      String host = subnet +"."+i; 
      if (InetAddress.getByName(host).isReachable(timeout)) 
       { 
       Check = Check+host+"\n"; 
       System.out.println(host); 
       } 

      } 
     catch (UnknownHostException ex) { 
      Logger.getLogger(WiFi.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (IOException ex) { 
      Logger.getLogger(WiFi.class.getName()).log(Level.SEVERE, null, ex);