web-dev-qa-db-ja.com

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:ローカルホスト名が不明: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

ただし、これは許可されていないため、この問題を解決する別の方法を見つける必要があります。

1
Elifarley

クラスJava.net.InetAddress、メソッドgetLocalHostをデバッグした後、Inet4AddressImpl.getLocalHostNameを呼び出し、「185-69-214-74.ded.intelignet.com.br」を返すのを見ました。 '-Djava.net.preferIPv4Stack = true'を使用します。 'Java.net.preferIPv4Stack'を省略すると、InetAddress.getLocalHostInet6AddressImpl.getLocalHostNameを呼び出し、「mybox」を返し、問題は解決します。

つまり、「UnknownHostException」は、次の条件が両方とも真である場合にのみ発生します。

  • -Djava.net.preferIPv4Stack = true
  • Javaバージョン= 8

したがって、これを修正する別の方法がわからないため、-Djava.net.preferIPv4Stack=trueを省略します。

3
Elifarley