jdk descargar java

java - descargar - InetAddress.getLocalHost() lento para ejecutarse(más de 30 segundos)



java offline (5)

El problema se puede resolver agregando lo siguiente a / etc / hosts (suponiendo que el nombre de host sea macbook :

127.0.0.1 macbook ::1 macbook

Esto devuelve el tiempo a algo más adecuado (<1 segundo)

Con el siguiente código:

try { System.out.println(new Date()); InetAddress hostName = InetAddress.getLocalHost(); System.out.println(new Date()); } catch (UnknownHostException e) { e.printStackTrace(); }

Me sale esta salida:

Thu Oct 22 20:58:22 BST 2015 Thu Oct 22 20:58:52 BST 2015

En otras palabras, 30 segundos para ejecutar. La máquina es 2015 Macbook Pro con Java 1.8.0_60.

¿Por qué esto lleva tanto tiempo?


En un MacBook Pro con Java 1.8.0_92 y 1.80_112 este problema aún existe, la llamada a InetAddress.getLocalhost () necesita> 5 segundos. La solución con el / etc / hosts modificado no funciona. Solo volver a Java 1.8.0_051 resuelve este problema.


Este problema aparece en MacOS Sierra con Java8, actualizaciones iguales o superiores a 60 (jdk1.8.0_60.jdk, jdk1.8.0_77.jdk, etc.).

La solución se puede encontrar aquí: https://github.com/thoeni/inetTester .

Este es el contenido de mi archivo / etc / hosts:

127.0.0.1 localhost mac.local ::1 localhost mac.local

En mi caso, mac es el nombre de mi computadora.


La respuesta anterior funciona en mi mac, puedes intentarlo así:

paso 1, descarga inetTester.jar desde la https://github.com/thoeni/inetTester

paso 2, ejecútalo en tu mac. Aquí está el resultado en mi Mac:

$ java -jar ./inetTester.jar Calling the hostname resolution method... Method called, hostname MacBook-Pro.local, elapsed time: 5009 (ms)

Se necesitan 5 segundos para ejecutar la prueba, y muestra el nombre de host de mi mac.

paso 3, modifica el / etc / hosts:

127.0.0.1 MacBook-Pro.local ::1 MacBook-Pro.local

el host es lo que se muestra en el paso 2. y después de esto, ejecute la prueba nuevamente:

$ java -jar ./inetTester.jar Calling the hostname resolution method... Method called, hostname MacBook-Pro.local, elapsed time: 6 (ms)

Sí, viene con solo 6 ms. 5s -> 6ms, bien.


Sospecho que el retraso aquí se debió a un intento fallido de resolución de DNS. Quizás sus servidores DNS no se configuraron correctamente. Los 30 segundos probablemente representan el tiempo de espera en la resolución DNS.

La razón por la cual su solución mejoró la velocidad es que agregar la entrada al archivo de hosts permitió que el nombre de host se resolviera localmente y, por lo tanto, omita el intento de resolver el nombre de host en un servidor DNS real (remoto).

EDITAR: es posible que se pregunte por qué este método tiene alguna resolución de host. Aparentemente, es parte de un mecanismo anti-spoofing integrado en la biblioteca de red Java. Consulte la respuesta aceptada de esta publicación para obtener más detalles: InetAddress.getCanonicalHostName () devuelve IP en lugar de Hostname