web-dev-qa-db-fra.com

Pourquoi la réponse sur localhost est-elle si lente?

Je travaille sur un tout petit petit projet PHP pour un de mes amis, et j'ai une configuration d'environnement WAMP pour le développement local. Je me souviens des jours où la réponse de mon Apache 2.2 local était immédiate. Hélas, maintenant que je reviens de longues vacances, je trouve les réponses de localhost douloureusement lentes.

Il faut environ 5 secondes pour qu'une page HTML 300B soit diffusée.

Quand je regarde le gestionnaire de tâches, les processus httpd (2) utilisent jusqu'à 0% du CPU et globalement mon ordinateur n'est pas sous charge (0-2% d'utilisation du CPU).

Pourquoi la latence est-elle si élevée? Y a-t-il un paramètre Apache que je pourrais modifier pour peut-être faire fonctionner son thread avec une priorité plus élevée ou quelque chose? Il semble qu'il dorme simplement avant de répondre.

59
Peter Perháč

Le problème était lié au fichier de paramètres principaux d'Apache httpd.conf.

J'ai trouvé ça:

Il existe trois façons de configurer PHP pour fonctionner avec Apache 2.x sous Windows. Vous pouvez exécuter PHP en tant que gestionnaire, en tant que CGI, ou sous FastCGI.[Source]

Et donc je suis allé dans les paramètres d'Apache et j'ai vu où était le problème: je l'ai fait configurer en CGI, au lieu de le charger en tant que module. Cela a causé php-cgi.exe pour démarrer et arrêter chaque fois que je fais une demande. Cela ralentissait mon localhost développement.

J'ai changé les paramètres pour charger PHP comme un module Apache [~ # ~] [~ # ~] et maintenant tout fonctionne parfaitement. :)

Pour charger le module PHP pour Apache 2.x:

1) insérez les lignes suivantes dans httpd.conf

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

AddHandler application/x-httpd-php .php

(p.s. changer C:/php sur votre chemin. Modifiez également php5Apache **. Dll en votre nom de fichier existant)

2) Pour limiter PHP exécution uniquement pour les fichiers .php, ajoutez ceci dans httpd.conf:

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

3) définir le chemin de php.ini dans httpd.conf (si après le redémarrage vous obtenez une erreur, supprimez à nouveau cette ligne)

PHPIniDir "C:/php"

Merci à tous pour vos efforts.

20
Peter Perháč

Pour moi, définir la propriété ServerName dans httpd.conf correction des retards (ils étaient au maximum de 10 secondes):

# 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

J'ai eu le même problème.

La définition de la redirection localhost sur 127.0.0.1 dans le fichier hosts n'a pas aidé. L'optimisation du serveur MySQL n'a pas aidé (InnoDB -> MyISAM, modifiant de nombreuses directives liées au cache dans my.ini).

J'ai ensuite utilisé web webgrind et réduit le problème à l'appel "new PDO (...)". En changeant

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

à

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

en dsn pour PDO complètement résolu le problème! Temps de chargement de la page passé de plus de 3000 ms à 16 ms.

Cependant, je ne comprends vraiment pas pourquoi la ligne "127.0.0.1 localhost" dans le fichier hosts n'a pas aidé.

21
michalko

Vérifier si /etc/hosts est correct. Comme ça:

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

Dans la place **** donnez votre nom d'hôte.

7
morpheus

J'ai eu le même problème et j'ai finalement découvert qu'il provenait de deux faits:

  1. J'utilise Mac OS X Mavericks
  2. J'ai accédé à mon projet via l'URL http://myproject.local/ parce que je mets une ligne 127.0.0.1 myproject.local dans /etc/hosts

Le problème apparaît car le .local tld est réservé au service Bonjour, et ce depuis Mac OS X Lion (10.7).

Changer le tld pour autre chose a résolu le problème.

7
lepix

Dans ton httpd.conf assurez-vous de définir le paramètre HostnameLookups Off.

4
drAlberT

Au cas où cela aiderait quelqu'un, j'ai eu ce problème et cela se résumait à recherche DNS incorrecte.

Le serveur DNS sur le serveur a été défini sur 127.0.0.1 - Je l'ai changé pour utiliser les serveurs DNS publics de Google, et cela a fait un tas plus rapide.

3
Toby Allen

La question a une balise Apache-2.2, mais si quelqu'un est affecté par ce problème néfaste également sur WAMP avec Apache 2.4 + PHP 5.5 , la réponse suivante sur SO a fait l'affaire pour moi:

éditer httpd.conf et désactiver le chargement du module CGI en commentant cette ligne: LoadModule cgi_module modules/mod_cgi.so

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

2
Marco Demaio