Wie kann ich das langsame Auflösen / Laden von localhost / virtualhost (2-3 Sekunden Verzögerung) unter Mac OS X Lion verhindern?


97

Seit ich meine Entwicklungsumgebungen unter Mac OS X Lion eingerichtet habe (brandneues MacBook Air, das im Januar 2012 gekauft wurde), habe ich festgestellt, dass die Auflösung auf einem virtuellen Host beim ersten Mal sehr langsam ist (ca. 3 Sekunden), danach jedoch so lange wie möglich Ich lade es regelmäßig weiter.

Wenn ich es für ein paar Minuten unberührt lasse und dann erneut lade, ist das erste Nachladen (wieder) schmerzhaft langsam; Es scheint, als würde etwas zwischengespeichert.

Wie unten zu sehen ist, verwende ich die .local TLD nicht.

Mein Setup: Apache 2 - MySQL - PHP installiert und aktiviert - hat einige virtuelle Hosts hinzugefügt, von denen einer für localhost erstellt wurde

Meine / 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

Mein virtueller Host in username.conf eingerichtet:

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>

Ich habe diesen stackoverflow.com/questions/19313546/… gefunden . und es funktioniert bei mir !!!
Clark yu

2
Ich habe dies als Fehler an Apple Rdar gemeldet: // 24237290 und habe diese lustige Antwort erhalten:> Das Engineering hat das folgende Feedback zu diesem Problem gegeben:> Dies ist das erwartete Verhalten seit der maximalen Nr. Die Anzahl der zulässigen Aliase in der Datei / etc / hosts ist 10. Mehr als 10 Aliase in der Datei / etc / hosts zu haben, scheint nicht praktikabel zu sein. Ich würde es begrüßen, wenn mehr Leute diesen Fehler melden und ihnen sagen, dass diese Antwort völlig lächerlich ist (und auch nirgendwo dokumentiert ist).
dwt

Hat die Verwendung der .local-TLD etwas Schlechtes?
Yaakov Ainspan

Funktioniert gut für mich in Mojave ... :)
Rogerdpack

Antworten:


169

Ich hatte genau das gleiche Problem und es machte mich verrückt!

Fügen Sie alle Ihre Hosts-Dateieinträge für localhost wie folgt in eine Zeile ein:

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

Arbeitete wie ein Zauber für mich. Scheint wie ein Fehler in Lion.


Dies funktioniert und ich denke, @ adam-gries sollte es als Antwort markieren. Danke Jeremy!
Zysoft

5
Dieses Update hat bei mir funktioniert, aber ich habe ein Limit von 11 Sites erreicht, danach lief es noch langsamer! Im Moment habe ich die Dinge in zwei Host-Einträge aufgeteilt (mit derselben IP-Adresse) und es scheint in Ordnung zu sein.
Alex Ghiculescu

Gleiches Problem und Lösung wie @AlexGhiculescu, jedoch unter OS X 10.8 Mountain Lion.
chrishiestand

2
OS X 10.9 ist immer noch ein Problem und macht mich schon seit Stunden verrückt! Genial, danke für die tolle Antwort!
Robertp

2
Dies funktioniert nur, weil Sie die Hosteinträge VOR dem anderen lokalen Host-Geräte-Routing eingeben. Wenn Ihr Webserver 127.0.0.1 anzeigt, müssen sich diese Hosts im HEAD der Datei / etc / hosts befinden, damit Sie schnell nachschlagen können. Ich habe mehrere Dutzend 127.0.0.1-Zeilen. Erst als ich sie in den oberen Bereich der Datei / etc / hosts verschoben habe, wurden sie für mich schnell aufgelöst.
Joey T

70

Es gibt ein weiteres Problem 10.7. * Bis 10.8.4 für Websites, die mit ".local" enden und fünf Sekunden lang nachschlagen. Details und Lösung mit freundlicher Genehmigung von Bram (us) Van Damme unter folgendem Link:

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

"Standardmäßig wird jeder Hostname, der auf .local endet, als Bonjour-Host behandelt, anstatt die DNS-Servereinträge in den Netzwerkeinstellungen abzufragen.

Um dieses Problem zu beheben (ohne jeden vhost umbenennen zu müssen), müssen Sie IPv6-Einträge für jeden Ihrer vhosts in Ihrer Datei / etc / hosts hinzufügen: "

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

Dies betrifft auch Windows-Systeme. Lösung funktioniert auch dort wie ein Zauber.
ToBe

Ich hatte dieses Problem immer wieder, während ich Hosts auf eine lokale VM zeigte. Ich habe meine Hosts-Datei gut formatiert gelassen (Einträge in eigenen Zeilen usw.) und zusätzliche Einträge unter Verwendung der IPV6-Adresse von der VM hinzugefügt, und alle meine Verzögerungsprobleme sind verschwunden. Ich schien nur mit Websites zu enden .local, die auf endeten , und das Hinzufügen beider IPV4 / 6-Einträge hat alles für mich behoben (OS X 10.9)
Justin

Musste ein wenig damit kämpfen, weil mein Hostname im Einstellungsbereich "Teilen" nicht mit dem übereinstimmte, den ich in / etc / hosts eingegeben habe, nur für den Fall, dass es jemandem hilft ...
abhishekmukherg

Beeindruckend. Ich verstehe, dass dies ::1das IPv6-Verknüpfungsäquivalent von ist 127.0.0.1. Aber was heißt fe80::1%lo0das? - ah, antwortete auf superuser.com/questions/241642/...
AlexChaffee

Unter MacOS Sierra funktionierte dies, aber ich musste die erste Zeile entfernen.
Bryce York

24

Ich hatte das gleiche Problem, auch bei Lion.

Seltsamerweise war meine Lösung das Gegenteil von Jeremys. Ich hatte eine ganze Reihe von someproject.dev-Einträgen in einer Zeile in / etc / hosts. Das Laden einer Site auf eine von ihnen beim ersten Mal dauerte ewig, etwa eine Minute oder so. Wenn ich es innerhalb von 5 Sekunden wieder benutzte, war es sehr schnell, aber viel länger und es würde wieder eine Minute dauern. Ich hatte alle möglichen Dinge vermutet, MySQL-Verbindungen, Ruby-Versionen, Rails-Bugs, Apache, Phusion Passenger. Bis ich endlich auf die Konsole schaute und feststellte, dass DNS-Suchvorgänge versucht wurden.

Also habe ich sie alle in getrennte Zeilen gesetzt:

127.0.0.1 localhost

127.0.0.1 myproject.dev

127.0.0.1 myotherproject.dev

Und plötzlich war alles wieder bissig. Auf beiden Maschinen gleich.


Ich habe hier im Stackoverflow alles versucht, aber dieser und der Beitrag von user902664 haben geholfen. Alle IPv4- und IPv6-Leitungen müssen einzeilig sein. Wenn Sie nur IPv4-Einträge verwenden, jedoch in getrennten Leitungen, wurde die Verwendung von 30 Sekunden auf ~ 1 verringert. Die Verwendung zusammen mit IPv6-Einstellungen in getrennten Leitungen wurde auf ~ 0,5 Sekunden verringert.
Tomis

Dies scheint ein verrückter Fehler zu sein. Ich hatte einen Eintrag für eine Adresse, 192.168.56.3 mit 14 Aliasen. Wenn Sie einen Alias ​​entfernen, können Sie die Hosts in <1s auflösen. Mit dem 14. Alias ​​dauert es ~ 30s, um die ersten Einträge in der Liste aufzulösen ...
Brian M. Carr

Ist dies ein Fehler, der nur für OSX gilt? Kann jemand auf einen Fehlerbericht verlinken?
pje

Ich habe nur Stunden damit verbracht, mehr über die Netzwerkkonfiguration zu lernen, als ich jemals wollte. Ich wollte gerade den Sprung wagen und einen lokalen DNS-Server einrichten, und dann wurde dies behoben. Danke dir. Mavericks 10.9.5 hier.
ungeschickte Finger

13

Die Angabe des gleichen Hosts für IPv6 :: 1 hat mir geholfen.

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

Ja und eine Domain pro Zeile.
Warvariuc

1
Dies hat das Problem für mich behoben. Zumindest in meinem Fall war nicht nur eine Domain pro Zeile erforderlich.
Jeff-h

9

Stellen Sie sicher, dass die IP v6-Einträge nicht in der Zeile mit localhost stehen

::1 localhost

Die IP v6-Einträge werden in einer separaten Zeile angezeigt

fe80::1%lo0 here and_here

Es ist jetzt manchmal sehr schnell, aber es gibt seltene Ausnahmen, in denen die alten Verzögerungen zurückkommen. Sie können jedoch auf anderen Gründen beruhen.


1
Dies funktionierte für mich unter OS X 10.11.6. Sobald ich den IPv4-Eintrag localhost (einzelne Zeile für 127.0.0.1) in eine :: 1-Zeile mit denselben Aliasnamen dupliziert hatte, gingen die Suchvorgänge von 4 bis 5 Sekunden auf den Moment zurück. Ich hatte auch einen 127.0.0.2-Eintrag, den ich als :: 2 dupliziert habe. Ich habe eine einzelne Zeile pro Adresse. Vielen Dank!
RichVel

7

Unter OSX El Capitan hat es für mich funktioniert, einen doppelten IPv6-Eintrag direkt über dem IPv4-Eintrag zu erstellen

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

Einverstanden, funktioniert mit IPv6-Einträgen über oder unter IPv4, sofern dieselbe Liste von Aliasen vorhanden ist.
RichVel

Dies ist absurd, hat aber das Problem behoben, dass Chrome die Localhost-Links zu meinen Laradock-Docker-Containern nur sehr langsam auflöst (Safari war schon immer in Ordnung)
jeff-h

Funktioniert auch für High Sierra - Firefox, Safari arbeiten mit oder ohne
Chris Athanasiadis

3

Es hat für mich den Unterschied gemacht, sicherzustellen, dass die Hostnamen am Anfang der Datei definiert sind. Standardmäßig steht die Zeile 127.0.0.1 localhost bereits am Anfang. Fügen Sie einfach Ihre Einträge in derselben Zeile hinzu.


Dies ist die echte Lösung, hat den ganzen Rest ausprobiert und hat nichts mit Referenzen zu tun, die alle in einer Zeile stehen oder mit der IPv6-Route verknüpft sind (es sei denn, dies ist möglicherweise Ihre primäre Route in Apache Conf ...). Danke @Erik!
Joey T

Auch das waren viel mehr als 2 oder 3 Sekunden für mich, eher 10 bis 20 Sekunden. Ich hatte viele 127.0.0.1-Einträge, aber alle wurden NACH der Standard-Localhost-Konfiguration von OS X aufgelistet. Ich bin auch auf Lion, nicht auf ML, wenn das wichtig ist.
Joey T

Leider funktioniert dies nicht mehr mit Mavericks - ich lasse meine Gegenstimme hier für Lion, obwohl es gut funktioniert hat, bis ich vor ein paar Monaten auf Mavs upgegradet habe.
Joey T

1

Ich hatte das gleiche Problem und stellte fest, dass es durch das Aktivieren von IPv6 in meinem LAN verursacht wurde, aber IPv6 zwischen meinem Netzwerk und meinem ISP nicht richtig konfiguriert war. Anscheinend hat der IPv6-DNS-Server Vorrang vor IPv4-DNS, wenn dem Client beides gegeben wird. Es dauerte einige Sekunden (bei jedem Versuch), bis der Client feststellte, dass das IPv6-DNS nicht erreichbar war oder fehlte, und dann auf IPv4-DNS zurückgriff.


1

Hinweis: Ich verwende Windows und XAMPP. Bei der Untersuchung des Problems hatten jedoch viele Benutzer das gleiche Problem unter Windows und Mac. Antwort als Referenz für alle, die diese Frage finden, da ich stundenlang versucht habe, eine Lösung zu finden, die für mich funktioniert:

Ich habe viele Lösungen für das gleiche Problem ausprobiert, darunter das Einfügen aller Hosts in eine Leitung, das Entfernen redundanter Hosts und virtueller Hosts sowie das Einbeziehen der IPv6-Leitungen - keine davon allein war erfolgreich.

Die einzige Lösung, die bisher für mich funktioniert hat, ist eine Kombination aller Lösungen:

  • Ändern der von mir verwendeten Domain von mysite. lokal zu mysite. dev . Inspiriert von @ Cleverlemmings Antwort.
  • Einschließlich der IPv6-Leitungen.
  • Redundante virtuelle Hosts und Hosts entfernen (ich habe sie auskommentiert).

In meiner Hosts-Datei befinden sich meine Hosts derzeit in separaten Zeilen, und das Problem scheint bisher behoben zu sein.

Viel Glück für alle, die versuchen, dieses Problem zu lösen, und wenn jemand Informationen zum Hinzufügen hat, tun Sie dies bitte - dies scheint ein Problem zu sein, das viele Menschen ohne eine einzige bekannte Ursache oder Lösung betrifft.


1

Ich hatte das gleiche Problem und stellte schließlich fest, dass ich zweimal denselben Hosteintrag in derselben Zeile hatte:

z.B

127.0.0.1 localhost host1 host2 host3 host4 host5 host1 host6

Ich habe die zweite Instanz desselben Hosts entfernt (im obigen Beispiel - host1) - und die Dinge haben sich sofort beschleunigt.

Fühlte sich ein wenig albern an, als ich das entdeckte, aber wenn Sie 10 lange Hostnamen in derselben Zeile haben und häufig hinzufügen / entfernen, kann dies leicht übersehen werden.


0

Der Trick, der es für mich getan hat, war das Hinzufügen

127.0.0.1 locahost

in der ersten Zeile der Hostdatei.

Von allen meinen virtuellen Hosts waren nur diejenigen, die eine Datenbank verwendeten, langsam. Ich glaube, das liegt daran, dass das Nachschlagen von "localhost" für die Datenbankverbindung die Dinge verlangsamt hat, da ich nur die Adressen für meine virtuellen Hosts hinzugefügt habe und nicht auch "localhost". Jetzt ist alles wieder bissig. :) :)


Ich hatte dort zwei Definitionen von localhost; man scheint besser zu sein.
Aaron Brick

0

Ich bin auch ein Haufen darauf gestoßen. Ich habe eine Reihe von vhosts in zwei Zeilen definiert, eine für IPv4 und eine für IPv6. Das Verschieben des Hosts, den ich zu lösen versuchte, um der erste in der Liste zu sein, beschleunigte ihn.

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

Ein dummes Problem, das mich dazu veranlasste, einige Zeit zu verschwenden: Nachdem ich die Antwort von @ Cleverlemming angewendet hatte , stellte ich fest, dass die Hosts-Datei doppelte Einträge enthielt. Etwas wie:

::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

Die IP-Auflösung für site3.local und site4.local dauert diese 5 Sekunden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.