在Java 8中启用JMX时发生UnknownHostException

使用Java 7,我可以在启用JMX的情况下启动JVM,而不会使用这些属性发生任何问题:

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=8787 

如果我使用Java 8(Java版本1.8.0_45-b14; Java HotSpot(TM)64位服务器VM版本25.45-b02,混合模式),我总是得到这样一个错误:

java.net.MalformedURLException:本地主机名称unknown:java.net.UnknownHostException:185-69-214-74.ded.intelignet.com.br:185-69-214-74.ded.intelignet.com.br:unknown错误

如果我添加这个系统属性也会发生错误:

-Djava.rmi.server.hostname=185.69.214.74

但是,如果我不启用JMX,则可以成功启动Java 8。

为什么我在Java 7下看不到同样的问题? 是什么原因造成的?我应该怎么做才能避免这个错误,即使启用了JMX?

更多细节:

 $ hostname mybox $ hostname -i 185.69.214.74 $ host $(hostname -i) 74.214.69.185.in-addr.arpa domain name pointer 185-69-214-74.ded.intelignet.com.br. 

可能的解决方法是编辑/ etc / hosts以添加以下行:

 185.69.214.74 185-69-214-74.ded.intelignet.com.br 

但是,我不能这样做,所以我必须find另一种方法来解决这个问题。

debugging类java.net.InetAddress ,方法getLocalHost ,我看到它调用Inet4AddressImpl.getLocalHostName ,当我使用'-Djava.net时,返回“185-69-214-74.ded.intelignet.com.br”。 preferIPv4Stack =真”。 如果我省略了“java.net.preferIPv4Stack”,那么InetAddress.getLocalHost调用Inet6AddressImpl.getLocalHostName ,它将返回“mybox”并且问题消失。

换句话说,只有在这两个条件都成立时才会发生“UnknownHostException”:

  • -Djava.net.preferIPv4Stack =真
  • Java版本= 8

所以我只是省略-Djava.net.preferIPv4Stack=true ,因为我还没有想出解决这个问题的另一种方法。