Назад | Перейти на главную страницу

UnknownHostException при включении JMX в Java 8

Используя Java 7, я могу без проблем запустить JVM с включенным JMX, используя следующие свойства:

-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; 64-разрядная серверная виртуальная машина Java HotSpot (TM), сборка 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: unknown ошибка

Ошибка также возникает, если я добавляю это системное свойство:

-Djava.rmi.server.hostname=185.69.214.74

Однако я могу успешно запустить Java 8, если не включу JMX.

Почему я не вижу такой же проблемы в 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
  • Версия Java = 8

Так что я просто опущу -Djava.net.preferIPv4Stack=true, так как я не придумал другого способа исправить это.