sviluppo-web-qa.it

Perché la risposta su localhost è così lenta?

Sto lavorando a un piccolo piccolo PHP per un mio amico, e ho un ambiente WAMP configurato 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 di localhost dolorosamente lente.

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

Quando guardo il task manager, i processi httpd (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.

59
Peter Perháč

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

Ho trovato questo:

Esistono tre modi per impostare PHP per lavorare con Apache 2.x su Windows. Puoi 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.exe per avviare e chiudere ogni volta che ho fatto una richiesta. Questo stava rallentando il mio sviluppo di localhost.

Ho modificato le impostazioni per caricare PHP come modulo Apache [~ # ~] [~ # ~] e ora funziona tutto perfettamente :)

Per caricare il PHP per Apache 2.x:

1) inserisci le seguenti righe in httpd.conf

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

AddHandler application/x-httpd-php .php

(p.s. change C:/php sul tuo percorso. Inoltre, cambia php5Apache **. Dll con il nome del tuo file esistente)

2) Per limitare 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.

20
Peter Perháč

Per me, impostare la proprietà ServerName in httpd.conf risolti i ritardi (nel peggiore dei casi erano fino a 10 secondi):

# 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
59
sshow

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! 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.

21
michalko

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 **** dai il tuo nome host.

7
morpheus

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

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

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

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

7
lepix

Nella tua httpd.conf assicurati di impostare l'impostazione HostnameLookups Off.

4
drAlberT

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

Il server DNS sul server è stato impostato su 127.0.0.1 - L'ho modificato per utilizzare i server DNS pubblici di Google e questo ha reso l'heap più veloce.

3
Toby Allen

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:

modificare httpd.conf e disabilita il caricamento del modulo CGI facendo commentando questa riga: LoadModule cgi_module modules/mod_cgi.so

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

2
Marco Demaio