Frage Warum ist die Antwort auf localhost so langsam?


Ich arbeite an einem winzigen PHP-Projekt für einen Freund von mir, und ich 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 war. Leider, jetzt, wo ich von einem langen, langen Urlaub zurück bin, finde ich die Antworten von localhost schmerzhaft langsam.

Es dauert ungefähr 5 Sekunden, bis eine 300B HTML-Seite bereitgestellt wird.

Wenn ich mir den Aufgabenmanager anschaue, httpd processes (2) verbrauchen 0% der CPU und insgesamt ist mein Computer nicht ausgelastet (0-2% CPU-Auslastung).

Warum ist die Latenz so hoch? Gibt es irgendeine Apache-Einstellung, die ich optimieren könnte, um den Thread möglicherweise mit einer höheren Priorität oder etwas zu betreiben? Es scheint, als würde es einfach schlafen, bevor es die Antwort austeilt.


53
2017-09-17 17:15


Ursprung


Ist localhost Auflösung DNS richtigerweise? ping localhost sollte zurückkommen sofort mit 127.0.0.1. - Alexis Lê-Quôc
das funktioniert gut, die Antwort wurde in <1 ms empfangen - Peter Perháč
Ich dachte, Firefox könnte das Problem sein, aber dauert 5s sogar in IE, so muss entweder einige Systemeinstellung oder Apache-Einstellung oder Gremlins sein. - Peter Perháč
Hat es das gleiche Verhalten beim Anfordern von statischem Inhalt (d. H. Beim Laden http://localhost/index.html) Wenn nicht, könnte es sich um ein PHP-Problem und nicht um ein Apache-Problem handeln. - Marcus Spiegel
Was die vielen, unterschiedlichen Antworten auf diese Frage zeigen, ist, dass es Dutzende, wenn nicht Hunderte von verschiedenen Gründen gibt, die Seitenanfragen langsam sein können. Wenn Sie zu dieser Frage gekommen sind, weil Sie auch langsame Seitenanforderungen haben, müssen Sie tiefer in die Ursache der Langsamkeit einsteigen, bevor Sie hier eine nützliche Antwort bekommen können. strace und tcpdump sind nützliche Werkzeuge dafür. - Ladadadada


Antworten:


Für mich, die Einstellung ServerName Eigentum in httpd.conf Behebung der Verzögerungen (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

56
2018-01-13 11:55



Das funktioniert - ich wünschte, ich könnte zweimal upvoten - hohner
Das behebt es auch für mich! Von 10s Latenz auf 2ms gegangen! - DouglasHeriot
Ich kämpfte stundenlang und das war die Lösung. - williamcarswell
Warum ist das ein Problem, wenn localhost korrekt aufgelöst wird? Was passiert in diesen 10 Sekunden, bevor es antwortet? Warten auf eine Auszeit irgendwo? - milan
@Elipticalview Wie der Kommentar in der Datei sagt; If your host doesn't have a registered DNS name, enter its IP address here. - sshow


Das Problem war mit der Haupteinstellungsdatei von Apache httpd.conf.

Ich habe das gefunden:

Es gibt drei Möglichkeiten, PHP so einzurichten, dass es mit Apache 2.x unter Windows zusammenarbeitet. Sie können PHP als Handler, als CGI oder unter FastCGI ausführen.  [Quelle]

Und so ging ich in die Apache Einstellungen und sah, wo das Problem war: Ich hatte es als CGI eingerichtet, anstatt es als ein Modul zu laden. Dies bewirkte php-cgi.exe jedes Mal, wenn ich eine Anfrage machte, Das verlangsamte mein localhost Entwicklung nach unten.

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

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

1) füge folgende Zeilen ein httpd.conf 

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

AddHandler application/x-httpd-php .php

(p.s. Änderung C:/php auf deinen Weg. Ändere auch php5apache ** .dll zu deinem existierenden Dateinamen

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

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

3) setze den Pfad von php.ini in httpd.conf (Wenn nach dem Neustart ein Fehler auftritt, entfernen Sie diese Zeile erneut)

PHPIniDir "C:/php"

Danke Ihnen allen für Ihre Bemühungen.


20
2017-10-10 22:56



Mein Apache stoppt beim Hinzufügen der Zeilen wie in der Quelle erwähnt. Wie mache ich in Windows? - AgA
Dieser Link wurde abgelaufen. Benutze das: goo.gl/2EVth9 - T.Todua


Ich hatte das gleiche Problem.

Die Umleitung von localhost auf 127.0.0.1 in der hosts-Datei hat nicht geholfen. Die Optimierung des MySQL-Servers hat nicht geholfen (InnoDB -> MyISAM, viele cache-bezogene Anweisungen in my.ini geändert).

Dann benutzte ich Web-Webgrind und beschränkte das Problem auf "neues PDO (...)" Aufruf. Ä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 löste das Problem vollständig! Ladezeit der Seite ging von über 3000 ms auf 16ms.

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


19
2017-11-01 11:51



Kann mir jemand sagen, welche Datei ich bearbeiten soll, damit es funktioniert? - Giri
Sie sollten die Zeile bearbeiten, in der Sie sich mit der Datenbank verbinden (in Ihrem PHP-Skript). Z.B. ändere die Linie: $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 arbeitete vor kurzem an einer EXT-JS-Anwendung und hatte ein riesiges Problem mit MySQL-Datenabfragen, die zu lange brauchten, um darauf zu reagieren. MYSQL war im Grunde zu langsam. Gott sei Dank, habe die Antwort hier ... habe gerade meinen Host im Verbindungsskript geändert von: host = localhost; zu Host = 127.0.0.1 Meine Server-Antworten gingen von 3 Minuten (180 Sekunden) zu weniger als 1 Sekunde. Danke vielmals. - user184985
Das hat mein Problem gelöst. Seltsam ... Ich habe dieses Problem in SQLite nicht bemerkt - Mladen Janjetovic
Das selbe für mich, aber nur für WordPress. Ersetzte "localhost" durch "127.0.0.1" in wp-config.php - Adrian


Ich hatte das gleiche Problem und entdeckte schließlich, dass es aus zwei Fakten kam:

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

Das Problem erscheint, weil die .local tld ist für Bonjour Service reserviert, und dies seit Mac OS X Lion (10.7).

Durch Ändern des Tld für etwas anderes wurde das Problem behoben.


6
2018-06-24 13:26





In deiner httpd.conf Stellen Sie sicher, dass Sie die Einstellung vornehmen HostnameLookups Off.


4
2017-09-17 18:16



Ich habe anscheinend keine apache.conf Datei, auch suchte ich nach HostnameLookups Direktive in allen Dateien und ich fand es in der core.html.en Handbuch Datei. Es heißt, es ist standardmäßig ausgeschaltet, also denke ich, es ist ausgeschaltet - Peter Perháč


Überprüfen Sie, ob /etc/hostsist richtig. 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 *******

An dem Ort **** Gib deinen Hostnamen an.


4
2018-01-10 09:24



Es war der Fall für mich. Meine Domain wurde in der ipv4-Zeile eingestellt, aber nicht in ipv6. - Rafael Beckel
Auch für mich. Anfragen haben> 5 Sekunden gedauert, bevor ich die zusätzliche Zeile in / etc / hosts gesetzt habe. Jetzt läuft mein Zeug in ~ 0,1 Sekunden. - mwallisch


Für den Fall, dass es irgendjemandem hilft, hatte ich dieses Problem, und es kam darauf an, es zu sein falsche DNS-Suche.

Der DNS-Server auf dem Server wurde auf festgelegt 127.0.0.1 - Ich habe es geändert, um die Google Public DNS-Server zu verwenden, und das hat den gesamten Heap schneller gemacht.


3
2018-02-20 23:35





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

bearbeiten httpd.conf und deaktivieren Sie das Laden des CGI-Moduls durch    kommentieren diese Linie: LoadModule cgi_module modules/mod_cgi.so

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


1
2017-11-21 13:32