Jak mogę wyeliminować powolne rozwiązywanie / ładowanie localhost / virtualhost (2-3 sekundowe opóźnienie) w systemie Mac OS X Lion?


97

Odkąd skonfigurowałem moje środowiska programistyczne w systemie Mac OS X Lion (zupełnie nowy Macbook Air zakupiony w styczniu 2012 r.), Zauważyłem, że przejście do hosta wirtualnego jest bardzo powolne (około 3 sekundy) za pierwszym razem, ale potem jest szybkie, o ile Ciągle go ładuję.

Jeśli pozostawię go nietkniętego na kilka minut, a następnie załaduję ponownie, pierwsze przeładowanie będzie (znowu) boleśnie powolne; wygląda na to, że coś jest w pamięci podręcznej.

Jak widać poniżej, nie używam .local TLD.

Moja konfiguracja: Apache 2 - MySQL - PHP zainstalowane i włączone - dodałem kilka wirtualnych hostów, z których jeden utworzyłem dla localhost

Mój / etc / hosts:

127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost
127.0.0.1       myproject.dev
::1             myproject.dev
fe80::1%lo0     myproject.dev

Konfiguracja mojego wirtualnego hosta w username.conf:

NameVirtualHost *:80

<Directory "/Users/myusername/Sites/">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /Users/myusername/Dropbox/dev_envs/
</VirtualHost>
<VirtualHost *:80>
    ServerName myproject.dev
    DocumentRoot /Users/myusername/Dropbox/dev_envs/myprojectname
</VirtualHost>

Znalazłem ten stackoverflow.com/questions/19313546/… . i to działa dla mnie !!!
clark yu

2
Zgłosiłem to jako błąd do apple rdar: // 24237290 i otrzymałem tę przezabawną odpowiedź:> Inżynierowie przekazali następującą informację zwrotną dotyczącą tego problemu:> Jest to oczekiwane zachowanie od czasu maks. dozwolonych aliasów w pliku / etc / hosts jest 10. Posiadanie więcej niż 10 aliasów w pliku / etc / hosts nie wydaje się być praktyczne. Byłbym mile widziany, gdyby więcej osób zgłosiło ten błąd i powiedział im, że ta odpowiedź jest całkowicie niedorzeczna (i nigdzie nie została udokumentowana).
dwt

Czy jest coś złego w używaniu domeny TLD .local?
Yaakov Ainspan

U mnie działa dobrze w
mojejve

Odpowiedzi:


170

Miałem dokładnie ten sam problem i doprowadzał mnie to do szału!

Umieść wszystkie wpisy plików hosts dla localhost w jednej linii, jak na przykład:

127.0.0.1 localhost myproject.dev myotherproject.dev
::1 localhost
fe80::1%lo0 localhost

U mnie zadziałało jak urok. Wygląda na błąd w Lionie.


To działa i myślę, że @ adam-gries powinien oznaczyć to jako odpowiedź. Dzięki Jeremy!
zysoft.

5
To poprawione zadziałało, ale osiągnąłem limit 11 witryn, po czym zaczął działać jeszcze wolniej! Na razie podzieliłem rzeczy na dwa wpisy hostów (z tym samym adresem IP) i wydaje się, że wszystko działa dobrze.
Alex Ghiculescu

Ten sam problem i rozwiązanie, co @AlexGhiculescu, ale w systemie OS X 10.8 Mountain Lion.
chrishiestand

2
OS X 10.9, nadal stanowi problem i od wielu godzin doprowadza mnie do szału! Świetnie, dzięki za świetną odpowiedź!
robertp

2
Działa to tylko dlatego, że wpisujesz wpisy hosta PRZED routingiem innego urządzenia lokalnego. Jeśli twój serwer WWW patrzy na 127.0.0.1, te hosty muszą znajdować się na GŁOWIE pliku / etc / hosts, aby umożliwić szybkie wyszukiwanie. Mam kilkadziesiąt linii 127.0.0.1 i dopiero gdy przeniosłem je na górę pliku / etc / hosts, szybko rozwiązały się dla mnie.
Joey T

71

W przypadku witryn kończących się na „.local” występuje inny problem od 10.7. * Do 10.8.4, który powoduje pięciosekundowe wyszukiwania. Szczegóły i rozwiązanie dzięki uprzejmości Brama (us) Van Damme pod następującym linkiem:

http://www.bram.us/2011/12/12/mamp-pro-slow-name-resolving-with-local-vhosts-in-lion-fix/

„Domyślnie każda nazwa hosta kończąca się na .local jest traktowana jako host Bonjour, a nie przez wysyłanie zapytań do wpisów serwera DNS w preferencjach sieci.

Aby rozwiązać ten problem (bez konieczności zmiany nazwy każdego vhosta), musisz dodać wpisy IPv6 dla każdego z twoich vhostów w pliku / etc / hosts: "

::1 mysite.local
fe80::1%lo0 mysite.local
127.0.0.1 mysite.local

Dotyczy to również systemów Windows. Tam też rozwiązanie działa jak urok.
ToBe

Ciągle miałem ten problem podczas wskazywania hostów na lokalną maszynę wirtualną. Zostawiłem ładnie sformatowany plik hostów (wpisy we własnych wierszach itp.) I dodałem dodatkowe wpisy, używając adresu IPV6 z maszyny wirtualnej, i wszystkie moje problemy z opóźnieniami zniknęły. Wydawało się, że natknąłem się na to tylko z witrynami kończącymi się na .local, a dodanie obu wpisów IPV4 / 6 naprawiło wszystko dla mnie (OS X 10.9)
Justin,

Musiał walczyć z tym na trochę, bo mój hosta w okienku preferencji „Sharing” nie pasuje do jednego byłem Wpisując w / etc / hosts, tylko w przypadku pomaga nikomu ...
abhishekmukherg

Łał. Rozumiem, że ::1jest to odpowiednik skrótu IPv6 127.0.0.1. Ale co to fe80::1%lo0znaczy? - ah,
odebrano

na macOS Sierra to działało, ale musiałem usunąć pierwszą linię.
Bryce York

24

Miałem ten sam problem, także z Lionem.

O dziwo, moje rozwiązanie było przeciwieństwem rozwiązania Jeremy'ego. W jednym wierszu w / etc / hosts znajdowałem się cała masa wpisów typu projekt.dev. Załadowanie witryny na którymkolwiek z nich trwało wieczność, około minuty. Gdybym użył go ponownie w ciągu około 5 sekund, był bardzo szybki, ale znacznie dłuższy i ponownie zająłby minutę. Podejrzewałem różne rzeczy, połączenia mysql, wersje Ruby, błędy w Railsach, Apache, Phusion Passenger. Aż w końcu spojrzałem na konsolę i nie zdałem sobie sprawy, że próbowano wyszukiwać DNS.

Więc umieściłem je wszystkie w osobnych wierszach:

127.0.0.1 localhost

127.0.0.1 myproject.dev

127.0.0.1 myotherproject.dev

I nagle wszystko znów było żwawe. To samo na obu moich komputerach.


Próbowałem czegokolwiek tutaj w stackoverflow, ale ten i post użytkownika902664 pomógł. Wszystkie linie IPv4 i IPv6 muszą znajdować się w jednej linii. Jeśli używasz tylko wpisów IPv4, ale na oddzielnych liniach, zmniejszono z 30 sekund do ~ 1, a używanie razem z ustawieniami IPv6 na oddzielnych liniach spadło do ~ 0,5 sekundy.
tomis

Wydaje się, że to szalony błąd. Miałem wpis dotyczący adresu 192.168.56.3 z 14 aliasami. Usuń jeden alias i możesz rozwiązać hosty w <1s. W przypadku czternastego aliasu rozwiązanie pierwszych kilku wpisów na liście zajmuje ~ 30 sekund ...
Brian M. Carr,

Czy jest to błąd występujący wyłącznie w systemie OSX? Czy każdy może link do raportu o błędzie?
pje

Po prostu spędziłem godziny, ucząc się więcej o konfiguracji sieci, niż kiedykolwiek chciałem. Miałem zamiar zaryzykować i skonfigurować lokalny serwer DNS, a potem to naprawiło. Dziękuję Ci. Mavericks 10.9.5 tutaj.
niezdarne palce

13

Pomogło mi określenie tego samego hosta dla IPv6 :: 1.

127.0.0.1 something.local.mydomain.org
::1 something.local.mydomain.org

Tak, i jedna domena w każdym wierszu.
warvariuc

1
To rozwiązało problem. Przynajmniej w moim przypadku nie było potrzeby posiadania tylko jednej domeny na linię.
jeff-h

9

Upewnij się, że wpisy IP v6 nie znajdują się w wierszu z localhost

::1 localhost

wpisy IP v6 są umieszczane w osobnym wierszu

fe80::1%lo0 here and_here

Czasami jest teraz naprawdę szybki, ale są rzadkie wyjątki, w których stare opóźnienia powracają. Mogą jednak mieć inne przyczyny.


1
To zadziałało dla mnie na OS X 10.11.6 - gdy tylko zduplikowałem wpis localhost IPv4 (pojedyncza linia dla 127.0.0.1) do wiersza :: 1 z tymi samymi aliasami, wyszukiwanie przeszło z 4-5 sekund do natychmiastowego. Miałem również wpis 127.0.0.2, który zduplikowałem jako :: 2. Mam jedną linię na adres. Dzięki!
RichVel

7

Na OSX El Capitan to, co zadziałało, to utworzenie zduplikowanego wpisu IPv6 tuż ​​nad wpisem IPv4

fe80::1%lo0 demo.test.dev
127.0.0.1   demo.test.dev

Zgoda, działa z wpisem IPv6 powyżej lub poniżej IPv4, o ile ma tę samą listę aliasów.
RichVel

To absurd, ale naprawiono problem, który miałem z Chrome, który bardzo wolno rozwiązywał łącza lokalnego hosta do moich kontenerów dokera laradock (Safari zawsze było w porządku)
jeff-h

Działa również dla High Sierra - Firefox, Safari działają z nim lub bez niego
Chris Athanasiadis

3

Zapewnienie, że nazwy hostów są zdefiniowane na początku pliku, zrobiło dla mnie różnicę. Domyślnie wiersz 127.0.0.1 localhost znajduje się już na początku, po prostu dodaj swoje wpisy w tej samej linii.


To jest prawdziwe rozwiązanie, wypróbowałem całą resztę i nie ma to nic wspólnego z odniesieniami w jednej linii lub połączonymi z trasą IPv6 (chyba że jest to Twoja główna trasa w konfiguracji apache ...) dzięki @Erik!
Joey T

Poza tym było to dla mnie znacznie więcej niż 2 lub 3 sekundy, bardziej jak 10 do 20 sekund. Miałem dużo wpisów 127.0.0.1, ale wszystkie zostały wymienione PO domyślnej konfiguracji localhost przez OS X. Jestem również na Lion, a nie ML, jeśli to ma znaczenie.
Joey T

Niestety, to już nie działa w / Mavericks - zostawiając tutaj moje poparcie dla Lion, chociaż działało dobrze, dopóki nie przeszedłem na Mavs kilka miesięcy temu.
Joey T

1

Miałem ten sam problem i stwierdziłem, że jest on spowodowany włączeniem protokołu IPv6 w mojej sieci LAN, ale nieprawidłowym skonfigurowaniem protokołu IPv6 między moją siecią a dostawcą Internetu. Najwyraźniej serwer DNS IPv6 ma pierwszeństwo przed DNS IPv4, gdy klient ma oba. Po kilku sekundach (przy każdej próbie) klient stwierdził, że serwer DNS IPv6 jest nieosiągalny lub go brakuje, a następnie wrócił do serwera DNS IPv4.


1

Uwaga: używam systemu Windows i XAMPP, jednak podczas badania problemu wiele osób miało ten sam problem w systemach Windows i Mac. Odpowiedź w celach informacyjnych dla każdego, kto znalazł to pytanie, ponieważ spędziłem godziny, próbując znaleźć rozwiązanie, które będzie dla mnie odpowiednie:

Wypróbowałem wiele rozwiązań tego samego problemu, w tym umieszczenie wszystkich hostów w jednej linii, usunięcie nadmiarowych hostów i wirtualnych hostów, a także włączenie linii IPv6 - żadne z nich nie zakończyło się sukcesem.

Jedynym rozwiązaniem, które do tej pory wydawało mi się działać, jest połączenie wszystkich rozwiązań:

  • Zmiana używanej domeny z mysite. local to mysite. dev . Zainspirowany odpowiedzią @ Cleverlemming.
  • W tym linie IPv6.
  • Usuwanie nadmiarowych virtualhostów i hostów (skomentowałem je).

W moim pliku hosts moje hosty są obecnie w osobnych wierszach i jak dotąd problem wydaje się być rozwiązany.

Powodzenia dla każdego, kto próbuje rozwiązać ten problem, a jeśli ktoś ma jakieś informacje do dodania, zrób to - wydaje się, że problem dotyczył wielu ludzi bez jednej znanej przyczyny ani rozwiązania.


1

Miałem ten sam problem i w końcu zdałem sobie sprawę, że mam ten sam wpis hosta dwa razy w tej samej linii:

na przykład

127.0.0.1 localhost host1 host2 host3 host4 host5 host1 host6

Usunąłem drugą instancję tego samego hosta (w powyższym przykładzie - host1) - i wszystko natychmiast przyspieszyło.

Czułem się trochę głupio, kiedy to odkryłem, ale kiedy masz 10 długich nazw hostów w tej samej linii i często dodajesz / usuwasz, można to łatwo przeoczyć.


0

Sztuczka, która mi to zrobiła, polegała na dodaniu

127.0.0.1 locahost

w pierwszym wierszu pliku hosta.

Ze wszystkich moich wirtualnych hostów tylko te korzystające z bazy danych działały wolno. Wydaje mi się, że dzieje się tak dlatego, że proces wyszukiwania „localhost” dla połączenia z bazą danych spowolnił wszystko, ponieważ dodałem tylko adresy moich wirtualnych hostów, a nie również „localhost”. Teraz znów jest żwawo. :)


Miałem tam dwie definicje hosta lokalnego; jeden wydaje się lepszy.
Aaron Brick

0

Ja też na to wpadłem. Mam kilka vhostów zdefiniowanych w dwóch wierszach, jedną dla IPv4 i jedną dla IPv6. Przeniesienie hosta, który próbowałem znaleźć na pierwszym miejscu na liście, przyspieszyło to.

127.0.0.1 faster.example.dev host1.example.dev host2.example.dev host3.example.dev host4.example.dev host5.example.dev host6.example.dev
::1 faster.example.dev host1.example.dev host2.example.dev host3.example.dev host4.example.dev host5.example.dev host6.example.dev

0

Głupi problem, który zmarnował trochę czasu: po zastosowaniu odpowiedzi @ Cleverlemming stwierdziłem, że w pliku hosts są zduplikowane wpisy. Coś jak:

::1          site1.local site2.local site1.local site3.local site4.local
fe80::1%lo0  site1.local site2.local site1.local site3.local site4.local
127.0.0.1    site1.local site2.local site1.local site3.local site4.local

Następnie rozwiązanie IP dla site3.local i site4.local zabiera te 5 sekund śmierci.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.