Warum ist die Antwort auf localhost so langsam?


59

Ich arbeite an einem winzigen kleinen PHP-Projekt für einen Freund von mir und habe eine WAMP-Umgebung für die lokale Entwicklung eingerichtet. Ich erinnere mich an die Tage, als die Antwort von meinem lokalen Apache 2.2 sofort erfolgte. Leider, jetzt, da ich von einem langen, langen Urlaub zurückgekommen bin, finde ich die Reaktionen von localhostschmerzhaft langsam.

Es dauert ungefähr 5 Sekunden, um eine 300-Byte-HTML-Seite zu erhalten.

Wenn ich mir den Task-Manager anschaue, belegen die httpdProzesse (2) 0% der CPU und insgesamt ist mein Computer nicht ausgelastet (0-2% CPU-Auslastung).

Warum ist die Latenz so hoch? Gibt es eine Apache-Einstellung, die ich ändern könnte, um den Thread möglicherweise mit einer höheren Priorität auszuführen oder so? Es scheint, als ob es einfach schläft, bevor es die Antwort gibt.


1
Ist die localhostLösung richtig DNS-weise? ping localhostsollte sofort mit zurückkommen 127.0.0.1.
Alexis Lê-Quôc

das funktioniert gut, Antwort in <1ms erhalten
Peter Perháč

Ich dachte, Firefox könnte das Problem sein, aber es dauert sogar 5s im IE, also muss es entweder eine Systemeinstellung oder eine Apache-Einstellung oder Gremlins sein.
Peter Perháč

2
Hat es das gleiche Verhalten beim Anfordern von statischem Inhalt (dh beim Laden http://localhost/index.html)? Wenn nicht, könnte es sich um ein PHP-Problem handeln, nicht um ein Apache-Problem.
Marcus Spiegel

5
Die vielen und unterschiedlichen Antworten auf diese Frage zeigen, dass es Dutzende, wenn nicht Hunderte verschiedener Gründe gibt, warum Seitenanforderungen langsam sein können. Wenn Sie zu dieser Frage gekommen sind, weil Sie ebenfalls langsame Seitenanforderungen haben, müssen Sie die Ursache der Langsamkeit genauer untersuchen, bevor Sie hier eine nützliche Antwort erhalten. straceund tcpdumpsind nützliche Werkzeuge dafür.
Ladadadada

Antworten:


59

Bei der Einstellung der ServerNameEigenschaft in wurden httpd.confdie Verzögerungen behoben (sie betrugen im schlimmsten Fall bis zu 10 Sekunden):

# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
ServerName 127.0.0.1:80

12
Dies funktioniert - wünschte, ich könnte zweimal
stimmen

8
Das behebt es auch für mich! Von 10s Latenz auf 2ms gegangen!
DouglasHeriot

Ich kämpfte stundenlang und dies war die Lösung.
William Carswell

1
Warum ist dies ein Problem, wenn localhost ordnungsgemäß behoben wird? Was passiert in diesen 10 Sekunden, bevor es antwortet? Warten Sie auf eine Auszeit?
milan

3
@Elipticalview Wie der Kommentar in der Datei sagt; If your host doesn't have a registered DNS name, enter its IP address here.
sshow

21

Ich hatte genau das gleiche Problem.

Das Setzen von localhost redirect auf 127.0.0.1 in der hosts-Datei hat nicht geholfen. Die Optimierung des MySQL-Servers hat nicht geholfen (InnoDB -> MyISAM, Änderung vieler cachebezogener Anweisungen in my.ini).

Dann habe ich web webgrind benutzt und das Problem auf "new PDO (...)" eingegrenzt. Ändern

mysql:host=localhost;dbname=dp-ui;charset=utf8 

zu

mysql:host=127.0.0.1;dbname=dp-ui;charset=utf8

in dsn für PDO hat sich das problem komplett gelöst ! Die Ladezeit der Seite stieg von über 3000 ms auf 16 ms .

Allerdings bin ich wirklich verwirrt, warum die "127.0.0.1 localhost" -Zeile in der hosts-Datei nicht geholfen hat.


3
Kann mir jemand sagen, welche Datei ich bearbeiten soll, damit sie funktioniert?
Giri

1
Sie sollten die Zeile bearbeiten, in der Sie eine Verbindung zur Datenbank herstellen (in Ihrem PHP-Skript). Zum Beispiel ändern Sie die Zeile: $link = new PDO('mysql:host=localhost;dbname=dp-ui;charset=utf8');zu $link = new PDO('mysql:host=127.0.0.1;dbname=dp-ui;charset=utf8');
Michalko

Ich habe kürzlich an einer EXT-JS-Anwendung gearbeitet und habe große Probleme damit, dass MYSQL-Datenabfragen zu lange dauern, um zu antworten. MYSQL war im Grunde zu langsam. Gott sei Dank, habe hier die Antwort erhalten ..... habe gerade meinen Host im Verbindungsskript geändert von: host = localhost; to host = 127.0.0.1 Meine Serverantworten sind von 3 Minuten (180 Sekunden) auf weniger als 1 Sekunde gestiegen. Danke vielmals.
user184985

Das hat mein Problem gelöst. Seltsam ... Ich habe dieses Problem in SQLite nicht bemerkt
Mladen Janjetovic

2
Das gleiche für mich, aber nur für WordPress. Musste "localhost" durch "127.0.0.1" in wp-config.php ersetzen
Adrian

20

Das Problem betraf die Haupteinstellungsdatei von Apache httpd.conf.

Ich habe das gefunden:

Es gibt drei Möglichkeiten, PHP für die Arbeit mit Apache 2.x unter Windows einzurichten. Sie können PHP als Handler, als CGI oder unter FastCGI ausführen. [Quelle]

Und so ging ich in die Einstellungen des Apache und sah, wo das Problem lag: Ich hatte es als CGI eingerichtet, anstatt es als Modul zu laden. Dies führte php-cgi.exedazu, dass jedes Mal, wenn ich eine Anfrage machte, gestartet und heruntergefahren wurde. Dies verlangsamte meine localhostEntwicklung.

Ich habe die Einstellungen geändert, um PHP als Apache- MODUL zu laden und jetzt funktioniert alles perfekt. :)

So laden Sie das PHP-Modul für Apache 2.x:

1) füge folgende Zeilen in ein httpd.conf

LoadModule php5_module "c:/php/php5apache2.dll"

AddHandler application/x-httpd-php .php

(ps ändern sich C:/phpzu Ihrem Pfad. Ändern Sie auch php5apache **. dll zu Ihrem vorhandenen Dateinamen)

2) Um die PHP-Ausführung nur für .php-Dateien einzuschränken, fügen Sie Folgendes hinzu httpd.conf:

<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch>

3) setze den Pfad der php.ini in httpd.conf(wenn nach dem Neustart ein Fehler auftritt , dann entferne diese Zeile wieder)

PHPIniDir "C:/php"

Ich danke Ihnen allen für Ihre Bemühungen.


2
Mein Apache stoppt beim Hinzufügen der Zeilen, wie in der Quelle erwähnt. Wie mache ich in Windows?
AgA

Dieser Link ist abgelaufen. Verwenden Sie diese: goo.gl/2EVth9
T.Todua

7

Ich hatte das gleiche Problem und entdeckte schließlich, dass es von zwei Tatsachen herrührte:

  1. Ich benutze Mac OS X Mavericks
  2. Ich habe über die URL auf mein Projekt zugegriffen, http://myproject.local/weil ich eine Zeile 127.0.0.1 myproject.localeingegeben habe/etc/hosts

Das Problem tritt auf, weil die .localtld für den Bonjour-Dienst reserviert ist, und zwar seit Mac OS X Lion (10.7).

Das Ändern der tld für etwas anderes hat das Problem behoben.


6

Überprüfen Sie, ob /etc/hostses korrekt ist. So was:

# hostname mobrglnx1 added to /etc/hosts by anaconda

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 *****

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 *******

****Geben Sie an der Stelle Ihren Hostnamen an.


Das war bei mir der Fall. Meine Domain wurde in der IPv4-Zeile festgelegt, aber nicht in IPv6.
Rafael Beckel

Gleiche für mich. Anfragen haben> 5 Sekunden gedauert, bevor ich die zusätzliche Zeile in / etc / hosts eingefügt habe. Jetzt läuft mein Zeug in ca. 0,1 Sek.
mwallisch

Bring mich in die richtige Richtung. Hinzugefügt 127.0.0.1 something.atmy.localhostund jetzt dauert die Anfrage nicht mehr 20 Sekunden. Stattdessen antwortet der lokale Apache sofort. Ich weiß nicht so viel über Netzwerke. Ich denke, der Domainname wird zu langsam aufgelöst, weil etwas nicht richtig konfiguriert ist.
Robsch

4

httpd.confStellen Sie sicher, dass Sie die Einstellung vornehmen HostnameLookups Off.


6
Ich habe anscheinend keine apache.conf-Datei. Außerdem habe ich in allen Dateien nach der HostnameLookups-Direktive gesucht und sie in der manuellen Datei core.html.en gefunden. Es stand, dass es standardmäßig ausgeschaltet ist, also denke ich, dass es ausgeschaltet ist
Peter Perháč,

3

Falls es jemandem hilft, hatte ich dieses Problem und es lief darauf hinaus, dass die DNS-Suche nicht korrekt war .

Der DNS-Server auf dem Server wurde auf eingestellt. 127.0.0.1Ich habe ihn so geändert, dass er die öffentlichen DNS-Server von Google verwendet. Dadurch wurde er ein ganzer Haufen schneller.


2

Die Frage hat einen Tag apache-2.2, aber wenn jemand von diesem schändlichen Problem auch auf WAMP mit Apache 2.4 + PHP 5.5 betroffen ist , hat die folgende Antwort auf SO den Trick für mich getan:

Bearbeiten httpd.confund deaktivieren Sie das Laden des CGI-Moduls, indem Sie diese Zeile kommentieren :LoadModule cgi_module modules/mod_cgi.so

https://stackoverflow.com/a/18786773/260080

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.