22 votos

¿Por qué es mi resolución de nombre de host tomando tanto tiempo?

Hace varios meses me di cuenta de que mi editor de texto (emacs) y el IDE (IntelliJ) estaban tomando mucho tiempo para arrancar. El tiempo parecía variar en función de los servidores DNS OS X estaba usando.

Yo era capaz de aislar el problema cuando un proyecto conjunto de pruebas se ejecuta lentamente. He encontrado el (nivel superior) culpable a ser una llamada a socket.getfqdn().

Ejecutando el siguiente comando en la terminal en OS X 10.10.2, muestra el problema:

$ time python -c 'import socket; socket.getfqdn()'
python -c 'import socket; socket.getfqdn()'  0.02s user 0.00s system 0% cpu 5.122 total

He seguido el código que se ejecuta cuando socket.getfqdn() se llama y el retraso es causado por getaddrinfo(3). Escribí un pequeño programa que aísla el problema y gai_strerror(3) proporciona este mensaje:

$ time ./hostinfo
Hostname: MacBook-Pro.local
getaddrinfo: nodename nor servname provided, or not known
./hostinfo  0.00s user 0.00s system 0% cpu 5.101 total

Parece que el retraso está a la espera de la consulta DNS a tiempo. Los resultados anteriores fueron el uso de Google en servidores DNS públicos. Si yo uso mis servidores DNS del ISP, sin embargo, el tiempo aumenta a 30 segundos:

$ time python -c 'import socket; socket.getfqdn()'
python -c 'import socket; socket.getfqdn()'  0.01s user 0.01s system 0% cpu 30.114 total

(curiosamente el programa de C hostinfo todavía tiene justo encima de 5 segundos)

Qué está causando este problema? Es mi nombre de host no válido o causando problemas?

$ hostname
MacBook-Pro.local

Este problema no ocurre en un Macbook Air en la misma red.

La principal diferencia que veo es que en la problemática de la máquina, los siguientes DNS confiugration se enumeran:

$ scutil --dns
DNS configuration

resolver #1
  search domain[0] : Home
  nameserver[0] : 8.8.8.8
  nameserver[1] : 8.8.4.4
  flags    : Request A records
  reach    : Reachable

DNS configuration (for scoped queries)

resolver #1
  search domain[0] : Home
  nameserver[0] : 8.8.8.8
  nameserver[1] : 8.8.4.4
  if_index : 4 (en0)
  flags    : Scoped, Request A records
  reach    : Reachable

En el Macbook Air, varios extras incluye entradas que se refieren a mDNS. Por ejemplo:

resolver #2
  domain   : local
  options  : mdns
  timeout  : 5
  flags    : Request A records
  order    : 300000

Este parece ser importante. Curiosamente, el tiempo de espera de arriba es acerca de la misma como los tiempos de ejecución anterior.

Debo señalar que estoy conectado a internet mediante WiFi y el problema sólo existe cuando tratando de resolver mi nombre de host del equipo.

22voto

lstg Puntos 21

Yo era capaz de solucionar este problema mediante la definición explícita de la HostName uso de scutil a ser el mismo valor como LocalHostName:

$ scutil --set HostName $(scutil --get LocalHostName)

Ahora:

$ sudo scutil --set HostName MacBook-Pro
$ time python -c 'import socket; print(socket.getfqdn())'
MacBook-Pro
python -c 'import socket; print(socket.getfqdn())'  0.01s user 0.00s system 86% cpu 0.016 total

Yo estaba confundido antes, porque de lo siguiente:

$ scutil --get LocalHostName
MacBook-Pro

$ hostname
MacBook-Pro.local

Pero:

$ scutil --get HostName
HostName: not set

2voto

Imrul Puntos 1486

Tenía el mismo problema, pero sus sugerencias no funciona para mí.

Finalmente, me fijo por hacer esto una vez hice esto:

sudo scutil --set HostName uranus.local

Mi host de la máquina es 'urano'. Sólo he tenido que añadir '.local'.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X