Используя 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
, так как я не придумал другого способа исправить это.