使用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=true
,因为我还没有想出解决这个问题的另一种方法。