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: неизвестно ошибка
Ошибка также происходит, если я добавляю это системное свойство:
-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
Однако мне не разрешено это делать, поэтому я должен найти другой способ решения этой проблемы.
1 ответ
После отладки класса 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 = верно
- Java версия = 8
Так что я просто опущу -Djava.net.preferIPv4Stack=true
, так как я не нашел другого способа исправить это.