Rozwiązanie do hosta wirtualnego bardzo wolno w systemie Mac OS X Lion

26

Od czasu uaktualnienia do systemu Mac OS X Lion (od Snow Leopard) zauważyłem, że przejście na hosta wirtualnego jest bardzo wolne (od około 3 sekund). Znalazłem szereg wskazówek (np. Nieużywanie TLD .local), które mogą rozwiązać ten problem, ale nie dotyczą mojej konfiguracji.

Moja konfiguracja jest dość prosta: - Apache 2 (dostarczany z Lion) - włączony PHP - dodano kilka wirtualnych hostów - zainstalowane pakiety Mail i SMTP Pear

Plik hosts Apache wygląda następująco:

127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0 localhost
127.0.0.1   tbi.dev
127.0.0.1   www.tbi.dev
127.0.0.1   test1.tbi.dev
127.0.0.1   test2.tbi.dev
127.0.0.1   psa.dev
127.0.0.1   snd.dev

Plik wirtualnych hostów Apache wygląda następująco:

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/tbi"
    ServerName tbi.dev
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/tbi"
    ServerName tbi.dev
    ServerAlias *.tbi.dev www.tbi.dev
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/psa"
    ServerName psa.dev
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot "/Users/Bart/Sites/sandbox"
    ServerName snd.dev
</VirtualHost>

Konfiguracja jest w zasadzie identyczna z moją konfiguracją w systemie Snow Leopard, ale wydajność Apache w rozwiązywaniu hostów wirtualnych jest znacznie inna. Korzystam z systemu Mac OS X Lion 10.7.2, ale problem występował już przy uruchomieniu 10.7.1.

Może się to wydawać niewielkim problemem, ale gdy uzyskujesz dostęp do wirtualnych hostów kilkaset razy dziennie, stanowi to znaczną stratę czasu, jak możesz sobie wyobrazić.

Bart Jacobs
źródło
W opisie problemu nie widzę niczego, co wykluczałoby zwykłe problemy, takie jak obciążenie systemu, wykorzystanie sieci, wykorzystanie pamięci. Mówisz, że rozwiązywanie wirtualnego hosta jest powolne. Skąd? Polecenie hosta lub przeglądanie strony obsługiwanej przez serwer? Jeśli jest to związane wyłącznie z DNS / hostem, możesz tak ustawić wydajność w wierszu poleceń: time host snd.dev
labradort

Odpowiedzi:

22

Długie limity czasu DNS są prawie zawsze oznaką problemów z IPv6.

Czy potrzebujesz łączności IPv6 do apache?

Jeśli nie, sugeruję zmianę

<VirtualHost *:80>

w

<VirtualHost 0.0.0.0:80>

Lub całkowicie wyłącz łączność IPv6.

adapttr
źródło
3
+1: Wyszukiwanie DNS ipv6 jest poważnym problemem w OSX. Z jakiegoś niejasnego powodu OSX najpierw sprawdza IPv6. Jeśli ten limit czasu (około 30 sekund), będzie kontynuowany z wersją v4. Wydaje się, że OSX nie sprawdza / etc / hosts po raz pierwszy dla wersji 6, robi to dla wersji 4, ale dopiero po upływie limitu czasu wersji 6. Jeśli nie możesz wyłączyć wersji 6, upewnij się, że masz w pełni działającą konfigurację wersji 6, w tym DNS DNS wersji 6.
Tonny
Dziękuję za odpowiedź. Nie jestem pewien, czy jest to jedyny problem, który odgrywa tutaj rolę, ale czas potrzebny na rozwiązanie lokalnego wirtualnego hosta skrócił się przez większość czasu.
Bart Jacobs
Moje wyszukiwanie DNS zajęło około 2-5 sekund, a nie 30. Nie jestem więc pewien, jaki był mój problem, ponieważ jest mało prawdopodobne, aby upłynął limit czasu. Niezależnie od tego, od momentu wprowadzenia zmian w tej odpowiedzi jest natychmiast.
Justin
22

Właśnie na to wpadłem.

Spowoduje to ustawienie IPv6 w konfiguracji sieci na Wył ...

# list all network interfaces to get their names
networksetup -listallnetworkservices
# disable the one you want, in my case it's WiFi
networksetup -setv6off Wi-Fi

Ale .. niestety to nie rozwiązało problemu rozwiązania DNS (może po ponownym uruchomieniu systemu). Naprawdę pomogło dodanie adresów IP w stylu ipv6 do / etc / hosts w następujący sposób:

# my original /etc/hosts ...
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1             localhost 
fe80::1%lo0 localhost

127.0.0.1 project.local

# adding this solved resolving:
fe80::1%lo0 project.local

wget http: //project.local teraz pokazuje natychmiast

Resolving project.local... 127.0.0.1
Connecting to project.local|127.0.0.1|:80... connected.

zamiast zawieszać się przez 5 sekund na Resolving project.local.

Dalibor Filus
źródło
Twoja rada była wszystkim, czego potrzebowałem - po prostu dodałem wpisy IPv6 do mojego pliku hosts obok standardu 127.0.0.1i problem został całkowicie rozwiązany.
Kirk Woll
Tak! Pomaga to w OS X 10.8 (Mountain Lion). Po aktualizacji z 10.6 bezpośrednio do 10.8, moje wyszukiwania lokalnego hosta też były na zawsze ... jakby upłynęły limit czasu przed rozstrzygnięciem. To rozwiązało problem. Dzięki!
Lothar_Grimpsenbacher
Ostatnio napotkałem ten problem i wpisy IPv6 w / etc / hosts rozwiązały go idealnie.
Neil Albrock,
to to, działa teraz dla mnie na Max OS 10.10.1
ezmilhouse
10

Na MacOSX Lion .local domena została „zarezerwowana” dla Multicast DNS Resolver (bonjour).

Oznacza to, że wyszukiwanie dowolnej domeny z rozszerzeniem .local spowoduje wyszukiwanie mDNS (do 5 s) przed / etc / hosts.

Poprawki:

  1. Zmień domeny testowe na inne domeny TLD (tj. .dev)
  2. Użyj narzędzia dscl, aby dodać wyjątek.
Artur Bodera
źródło
Pracowałem też dla mnie ... doprowadzało mnie do szału, że tylko kilka moich stron deweloperów robiło to ... nisko i oto ... wszystkie, które kończą się na .local! tak się nie stało, dopóki nie uaktualniłem do High Sierra ... dzięki @artur
Mfoo
1
dsclwyjątkowa strategia jest całkiem sprytna. @ artur-bodera twój link wygasł, ale zarchiwizowali swój stary blog na github github.com/icebourg/itandme-archive/blob/master/posts/2011/08/…
lkraav
Zauważ też, że .local jest proponowanym standardem dla IETF: tools.ietf.org/html/rfc6762 Naprawdę dobrze jest po prostu zarejestrować nazwę domeny, jeśli potrzebujesz domeny „testowej”, ponieważ masz pełną kontrolę nad tym, jak to jest skonfigurowany w DNS. Utworzenie nazwy domeny najprawdopodobniej spowoduje dziwne konflikty z innymi częściami systemu domen (w tym przypadku mDNS).
James Tikalsky
3

Zajrzyj na tego bloga, aby zobaczyć, czy to pomaga, szczególnie podkreślając problem nr 2:

Najwyraźniej terminal i niektóre narzędzia BSD Unix poprawnie używają /etc/resolv.conf i poprawnej kolejności plików / etc / hosts, a następnie serwerów DNS. Jednak wszystko inne w systemie OS X Lion, w tym wszystkie aplikacje, zrób to wstecz!

DTest
źródło
1

To działa.

Korzystam z tego rozwiązania

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost6
fe80::1%lo0 localhost
hipnoza
źródło
1

Ten sam błąd w Mavericks.

Rozwiązane, gdy umieszczam definicje moich hostów lokalnych na początku /etc/hosts, w następujący sposób:

127.0.0.1 localhost project1.dev project2.dev
127.0.0.1 project3.dev project4.dev
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost
sviriden
źródło
0

Spróbowałbym zmienić:

::1             localhost 
fe80::1%lo0 localhost

do

::1             localhost6 
fe80::1%lo0 localhost6
Alien Life Form
źródło
1
Niestety to nie rozwiązuje problemu. Czy możesz powiedzieć, jaka logika kryje się za twoją sugestią? Dzięki za odpowiedź.
Bart Jacobs
Niedawno walczyłem niezwykle długo o odpowiedzi snmp z maszyn nieobsługujących IPV6, ale mających podobne wpisy w / etc / hosts. Inną rzeczą, która przychodzi mi na myśl, jest przekroczenie limitu czasu serwera nazw - trochę dziwne, ponieważ hosty powinny mieć pierwszeństwo przed bindowaniem. (Oczywiście możliwe do skonfigurowania).
Alien Life Form
Rzeczywiście bardzo dziwne. Czasami przejście na hosta jest natychmiastowe (jak się spodziewasz), a innym razem może potrwać kilka sekund.
Bart Jacobs