Несколько месяцев назад я заметил, что моему текстовому редактору (emacs) и IDE (IntelliJ) потребовалось очень много времени для запуска. Время варьировалось в зависимости от DNS-серверов, которые использовала OS X.
Мне удалось изолировать проблему, когда тестовый пакет проекта работал медленно. Я обнаружил, что виновником (более высокого уровня) является призыв socket.getfqdn()
.
Выполнение следующей команды в терминале на OS X 10.10.2, демонстрирует проблему:
$ time python -c 'import socket; socket.getfqdn()'
python -c 'import socket; socket.getfqdn()' 0.02s user 0.00s system 0% cpu 5.122 total
Я проследил код, который запускается, когда socket.getfqdn()
вызывается, и задержка вызвана getaddrinfo(3)
. Я написал небольшую программу, которая изолирует проблему и gai_strerror(3)
предоставляет следующее сообщение:
$ 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
Похоже, что задержка ожидания DNS-запроса истекает. Выше были результаты использования общедоступных DNS-серверов Google. Однако, если я использую DNS-серверы моего провайдера, время увеличивается до 30 секунд:
$ time python -c 'import socket; socket.getfqdn()'
python -c 'import socket; socket.getfqdn()' 0.01s user 0.01s system 0% cpu 30.114 total
(любопытно, что программа C hostinfo
все еще занимает чуть более 5 секунд)
Что вызывает эту проблему? Неверное имя моего хоста или проблемы?
$ hostname
MacBook-Pro.local
Эта проблема не возникает на Macbook Air в той же сети.
Основное различие, которое я вижу, состоит в том, что на проблемной машине указана следующая конфигурация DNS:
$ 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
В Macbook Air включены несколько дополнительных записей, относящихся к mDNS. Например:
resolver #2
domain : local
options : mdns
timeout : 5
flags : Request A records
order : 300000
Это кажется значительным. Интересно, что время ожидания, указанное выше, примерно такое же, как и время выполнения выше.
Я должен отметить, что я подключен к Интернету через Wi-Fi, и проблема существует только при попытке определить имя хоста моего компьютера.
ping my_ISP_DNS_server
&ping Google_DNS_server
?Ответы:
Я смог решить эту проблему, явно указав для
HostName
использованияscutil
значение, равноеLocalHostName
:Сейчас:
Я был смущен раньше из-за следующего:
Но:
источник
.local
(или, может быть, просто.
вообще).У меня изначально была такая же проблема, но в конце концов она была решена.
Раньше, у меня был:
Затем я изменил:
Затем я добавил в:
/etc/hosts
Стало быстро.
источник
Была такая же проблема, но ваши предложения не сработали для меня.
В конце концов, я исправил это, выполнив следующее:
Хозяин моей машины - «Уран». Мне нужно было только добавить «.local» к нему.
источник