Используя 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; Java сборка HotSpot(TM) 64-Bit Server 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
Однако я могу успешно запустить 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
, так как я не придумал другого способа исправить это.