Perché la risposta su localhost è così lenta?


59

Sto lavorando a un piccolo piccolo progetto PHP per un mio amico e ho una configurazione dell'ambiente WAMP per lo sviluppo locale. Ricordo i giorni in cui la risposta del mio Apache 2.2 locale era immediata. Purtroppo, ora che sono tornato da una lunga, lunga vacanza, trovo le risposte localhostdolorosamente lente.

Sono necessari circa 5 secondi per pubblicare una pagina HTML da 300B.

Quando guardo il task manager, i httpdprocessi (2) utilizzano fino allo 0% della CPU e nel complesso il mio computer non è sotto carico (0-2% di utilizzo della CPU).

Perché la latenza è così alta? C'è qualche impostazione di Apache che potrei modificare per far funzionare il suo thread con una priorità più alta o qualcosa del genere? Sembra che stia semplicemente dormendo prima di servire la risposta.


1
La localhostrisoluzione è corretta in termini di DNS? ping localhostdovrebbe tornare istantaneamente con 127.0.0.1.
Alexis Lê-Quôc,

funziona benissimo, risposta ricevuta in <1ms
Peter Perháč,

pensavo che Firefox potesse essere il problema, ma impiega 5 secondi anche in IE, quindi devono essere alcune impostazioni di sistema o impostazioni di Apache o gremlins.
Peter Perháč,

2
Ha lo stesso comportamento quando richiede contenuto statico (ad es. Durante il caricamento http://localhost/index.html)? In caso contrario, potrebbe trattarsi di un problema PHP, non di Apache.
Marcus Spiegel,

5
Ciò che molte, varie risposte a questa domanda mostrano è che ci sono dozzine, se non centinaia di motivi diversi per cui le richieste di pagine possono essere lente. Se sei arrivato a questa domanda perché anche tu hai richieste di pagine lente, dovrai scavare più a fondo nella causa della lentezza prima di poter ottenere una risposta utile qui. stracee tcpdumpsono strumenti utili per questo.
Ladadadada,

Risposte:


59

Per me, impostando la ServerNameproprietà in httpd.conffisso i ritardi (erano fino a 10 secondi nel peggiore dei casi):

# 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
Funziona - vorrei poter votare due volte
hohner,

8
Questo lo risolve anche per me! Passa dalla latenza 10s a 2ms!
DouglasHeriot il

Ho lottato per ore e questa era la soluzione.
williamcarswell,

1
perché questo è un problema se localhost si risolve correttamente? cosa sta succedendo quei 10 secondi prima che risponda? in attesa di timeout da qualche parte?
Milano,

3
@Elipticalview Come dice il commento nel file; If your host doesn't have a registered DNS name, enter its IP address here.
Mostra il

21

Ho avuto lo stesso problema.

L'impostazione del reindirizzamento localhost su 127.0.0.1 nel file hosts non ha aiutato. L'ottimizzazione del server MySQL non ha aiutato (InnoDB -> MyISAM, modificando molte direttive relative alla cache in my.ini).

Quindi ho usato webgrind web e ho ridotto il problema alla chiamata "new PDO (...)". Mutevole

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

per

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

in dsn per DOP risolto completamente il problema ! Il tempo di caricamento della pagina è passato da oltre 3000 ms a 16ms .

Tuttavia, sono davvero confuso perché la riga "127.0.0.1 localhost" nel file hosts non ha aiutato.


3
Qualcuno può dirmi quale file dovrei modificare per farlo funzionare?
Giri,

1
Dovresti modificare la linea in cui ti stai connettendo al database (nel tuo script PHP). Ad esempio, cambia la riga: $link = new PDO('mysql:host=localhost;dbname=dp-ui;charset=utf8');a $link = new PDO('mysql:host=127.0.0.1;dbname=dp-ui;charset=utf8');
michalko il

Di recente stavo lavorando su un'applicazione EXT-JS e ho un problema enorme con le query di dati MYSQL che impiegano troppo tempo a rispondere. MYSQL era sostanzialmente troppo lento. Grazie al cielo, ho la risposta qui ..... ho appena cambiato il mio host nello script di connessione da: host = localhost; per ospitare = 127.0.0.1 Le risposte del mio server sono passate da 3 minuti (180 secondi) a meno di 1 secondo. Molte grazie.
user184985

Questo ha risolto il mio problema. Strano ... Non ho notato quel problema in SQLite
Mladen Janjetovic,

2
Lo stesso per me, ma solo per WordPress. Ho dovuto sostituire "localhost" con "127.0.0.1" in wp-config.php
Adrian il

20

Il problema era con il file delle impostazioni principali di Apache httpd.conf.

Ho trovato questo:

Esistono tre modi per configurare PHP per funzionare con Apache 2.x su Windows. È possibile eseguire PHP come gestore, come CGI o in FastCGI. [Fonte]

E così sono andato nelle impostazioni di Apache e ho visto dov'era il problema: l'avevo configurato come CGI, invece di caricarlo come modulo. Ciò ha causato php-cgi.exel'avvio e l'arresto di ogni volta che ho fatto una richiesta. Questo stava rallentando il mio localhostsviluppo.

Ho modificato le impostazioni per caricare PHP come MODULO Apache e ora funziona perfettamente. :)

Per caricare il modulo PHP per Apache 2.x:

1) inserire le seguenti righe in httpd.conf

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

AddHandler application/x-httpd-php .php

(ps cambia C:/phpnel tuo percorso. Inoltre, cambia php5apache **. dll con il nome del tuo file esistente)

2) Per limitare l'esecuzione di PHP solo per i file .php, aggiungilo in httpd.conf:

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

3) imposta il percorso di php.ini in httpd.conf(se dopo il riavvio ricevi un errore, rimuovi di nuovo questa riga)

PHPIniDir "C:/php"

Grazie a tutti per i vostri sforzi.


2
Il mio Apache smette di aggiungere le linee come indicato nella Fonte. Come posso fare in Windows?
AgA,

quel collegamento è scaduto. Usa questo: goo.gl/2EVth9
T.Todua,

7

Ho avuto lo stesso problema e finalmente ho scoperto che proveniva da due fatti:

  1. Uso Mac OS X Mavericks
  2. Ho acceduto mio progetto tramite l'URL http://myproject.local/perché ho messo una linea 127.0.0.1 myproject.localin/etc/hosts

Il problema appare perché .localtld è riservato al servizio Bonjour, e questo da Mac OS X Lion (10.7).

La modifica del tld per qualcos'altro ha risolto il problema.


6

Controlla se /etc/hostsè corretto. Come questo:

# 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 *******

Nel posto ****dare il nome host.


È stato il caso per me. Il mio dominio è stato impostato nella riga ipv4, ma non in ipv6.
Rafael Beckel,

Stessa cosa per me. Le richieste hanno richiesto> 5 secondi prima di inserire la riga aggiuntiva in / etc / hosts. Ora la mia roba funziona in circa 0,1 secondi.
mwallisch,

Mettimi nella giusta direzione. Aggiunta 127.0.0.1 something.atmy.localhoste ora la richiesta non richiede più 20 secondi. Invece l'apache locale risponde immediatamente. Non so molto delle reti. Immagino che il nome di dominio venga risolto troppo lentamente, perché qualcosa non è configurato correttamente.
robsch,

4

Nel tuo httpd.confessere sicuro di impostare l'impostazione HostnameLookups Off.


6
non mi sembra di avere un file apache.conf, ho anche cercato la direttiva HostnameLookups in tutti i file e l'ho trovata nel file manuale core.html.en. Diceva che era spento di default, quindi immagino che sia spento
Peter Perháč,

3

Nel caso in cui aiuti qualcuno, ho avuto questo problema e si è ridotto a una ricerca DNS errata .

Il server DNS sul server era impostato su 127.0.0.1: l'ho modificato per utilizzare i server DNS pubblici di Google e ciò ha reso l'heap più veloce.


2

La domanda ha un tag apache-2.2, ma se qualcuno è interessato da questo problema nefasto anche su WAMP con Apache 2.4 + PHP 5.5 , la seguente risposta su SO ha fatto il trucco per me:

modifica httpd.confe disabilita il caricamento del modulo CGI commentando questa riga:LoadModule cgi_module modules/mod_cgi.so

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.