Ana bilgisayar adı çözümüm neden bu kadar uzun sürüyor?


14

Birkaç ay önce, metin editörümün (emacs) ve IDE'nin (IntelliJ) başlaması gerçekten çok zaman alıyordu. OS X'in kullandığı DNS sunucularına göre zaman değişiyordu.

Bir projenin test takımı yavaş çalışıyorken sorunu çözmeyi başardım. (Yüksek seviye) suçluyu bir çağrı olarak buldum socket.getfqdn().

Terminal X OS 10.10.2’de aşağıdaki komutu çalıştırmak problemi gösterir:

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

Çağrıldığında çalışan kodun izini sürdüm socket.getfqdn()ve gecikmeye neden oluyor getaddrinfo(3). Sorunu izole eden ve gai_strerror(3)şu mesajı sağlayan küçük bir program yazdım :

$ 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

Görünüşe göre gecikme, DNS sorgusunun zaman aşımına uğramasını bekliyor. Yukarıdaki sonuçlar Google’ın genel DNS sunucularını kullanıyordu. Ancak ISS’imin DNS sunucularını kullanırsam, süre 30 saniyeye çıkar:

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

(merakla C programı hostinfohala 5 saniyenin üzerinde sürüyor)

Bu soruna ne sebep oluyor? Ana bilgisayar adım geçersiz mi veya sorunlara neden mi?

$ hostname
MacBook-Pro.local

Bu sorun aynı ağdaki Macbook Air'de gerçekleşmiyor.

Görebildiğim en büyük fark, sorunlu makinede, aşağıdaki DNS eşleşmesinin listelenmiş olmasıdır:

$ 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'de, mDNS ile ilgili birkaç ekstra giriş bulunur. Örneğin:

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

Bu önemli gibi görünüyor. İlginç bir şekilde, yukarıda listelenen zaman aşımı, yukarıdaki çalışma zamanları ile aynıdır.

WiFi kullanarak internete bağlı olduğumu ve yalnızca bilgisayarımın ana bilgisayar adını çözmeye çalışırken sorunun var olduğunu not etmeliyim.


67590 nolu gemiye hoş geldiniz. Lütfen sorunuza MBP’nizin İnternete nasıl bağlandığını (Ethernet, Wi-Fi, Bluetooth…) ekleyin. Bir temel denediniz mi ping my_ISP_DNS_server& ping Google_DNS_server?
dan

Yanıtlar:


11

Ben açıkça ayarlayarak bu sorunu gidermek başardı HostNamekullanarak scutilaynı değer olması LocalHostName:

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

Şimdi:

$ 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

Aşağıdakiler yüzünden daha önce kafam karışmıştı:

$ scutil --get LocalHostName
MacBook-Pro

$ hostname
MacBook-Pro.local

Fakat:

$ scutil --get HostName
HostName: not set

Diğer cevabında da belirtildiği gibi, bunu düzeltmek gibi görünüyor, sadece ayarlanması değil, .localaynı zamanda (veya sadece .genel olarak) içermesi gerekir .
Keith Smiley,

4

Başlangıçta aynı sorunu yaşadım, ancak sonunda çözüldü.

Ben eskiden:

$ scutil --get HostName
Michaels-Macbook-Pro
$ scutil --get LocalHostName
Michaels-Macbook-Pro
$ time python -c 'import socket; socket.getfqdn()'
... 30s ...

Sonra değiştim:

$ scutil --set HostName Michaels-Macbook-Pro.local
$ time python -c 'import socket; socket.getfqdn()'
... 5s ...

Sonra ekledim: /etc/hosts

127.0.0.1       localhost Michaels-Macbook-Pro.local
::1             localhost Michaels-Macbook-Pro.local

Hızlı oldu.


2

Aynı sorunu vardı, ancak önerileriniz benim için işe yaramadı.

Sonunda, bunu yaptıktan sonra bunu yaparak düzelttim:

sudo scutil --set HostName uranus.local

Makine ana bilgisayarım 'uranüs'. Sadece ona '.local' eklemek zorunda kaldım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.