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:ローカルホスト名が不明:Java.net.UnknownHostException:185-69-214-74.ded.intelignet.com.br:185-69-214-74.ded.intelignet.com.br:不明エラー
このシステムプロパティを追加すると、エラーも発生します。
-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
ただし、これは許可されていないため、この問題を解決する別の方法を見つける必要があります。
クラスJava.net.InetAddress
、メソッドgetLocalHost
をデバッグした後、Inet4AddressImpl.getLocalHostName
を呼び出し、「185-69-214-74.ded.intelignet.com.br」を返すのを見ました。 '-Djava.net.preferIPv4Stack = true'を使用します。 'Java.net.preferIPv4Stack'を省略すると、InetAddress.getLocalHost
はInet6AddressImpl.getLocalHostName
を呼び出し、「mybox」を返し、問題は解決します。
つまり、「UnknownHostException」は、次の条件が両方とも真である場合にのみ発生します。
したがって、これを修正する別の方法がわからないため、-Djava.net.preferIPv4Stack=true
を省略します。