74 votes

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

Je travaille sur un tout petit projet PHP pour un de mes amis, et j'ai un environnement WAMP configuré pour le développement local. Je me souviens de l'époque où la réponse de mon Apache 2.2 local était immédiate. Hélas, maintenant que je suis rentré d'un long, très long congé, je trouve que les réponses d'Apache 2.2 sont immédiates. localhost douloureusement lent.

Il faut environ 5 secondes pour qu'une page HTML de 300B soit servie.

Quand je regarde le gestionnaire de tâches, le httpd Les processus (2) utilisent 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 d'Apache que je pourrais modifier pour que son thread soit exécuté avec une priorité plus élevée ou autre ? Il semble qu'il dorme simplement avant de servir la réponse.

1 votes

Est localhost se résout correctement au niveau du DNS ? ping localhost devrait revenir instantanément con 127.0.0.1 .

0 votes

Cela fonctionne bien, réponse reçue en <1ms

0 votes

Je pensais que firefox pouvait être le problème, mais ça prend 5s même dans IE, donc ça doit être soit un paramètre système ou un paramètre Apache ou des gremlins.

67voto

sshow Points 795

Pour moi, la mise en place de la ServerName la propriété dans httpd.conf a corrigé les retards (ils pouvaient atteindre 10 secondes au pire) :

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

Cela fonctionne - j'aimerais pouvoir voter deux fois plus haut.

8 votes

Cela corrige le problème pour moi aussi ! Je suis passé d'une latence de 10s à 2ms !

0 votes

J'ai lutté pendant des heures et c'était la solution.

25voto

michalko Points 341

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

La redirection de localhost vers 127.0.0.1 dans le fichier hosts n'a pas aidé. L'optimisation du serveur MySQL n'a pas aidé (InnoDB -> MyISAM, modification de nombreuses directives relatives au cache dans my.ini).

J'ai ensuite utilisé webgrind et j'ai réduit le problème à l'appel "new PDO(...)". Changement de

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

a

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

dans dsn pour PDO a complètement résolu le problème ! Temps de chargement des pages est passé de plus de 3000 ms à 16ms .

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

5 votes

Quelqu'un peut-il me dire quel fichier je dois modifier pour que cela fonctionne ?

2 votes

Vous devez modifier la ligne où vous vous connectez à la base de données (dans votre script PHP). Par exemple, modifiez la ligne : $link = new PDO('mysql:host=localhost;dbname=dp-ui;charset=utf8'); à $link = new PDO('mysql:host=127.0.0.1;dbname=dp-ui;charset=utf8');

0 votes

J'ai travaillé récemment sur une application EXT-JS et j'ai eu un énorme problème avec les requêtes de données MYSQL qui prenaient trop de temps pour répondre. MYSQL était fondamentalement trop lent. Dieu merci, j'ai trouvé la réponse ici..... juste changé mon hôte dans la connexion script de : host = localhost ; to host = 127.0.0.1 Mes réponses du serveur sont passées de 3min(180secs) à moins de 1 sec. Merci beaucoup.

22voto

monkfishy Points 1

Le problème se situe au niveau du fichier de configuration principal d'Apache. httpd.conf .

J'ai trouvé ça :

Il y a trois façons de configurer PHP pour fonctionner avec Apache 2.x sous Windows. Vous pouvez exécuter PHP comme un gestionnaire, comme un CGI, ou sous FastCGI. [Source]

Je suis donc allé dans les paramètres d'Apache et j'ai vu où était le problème : Je l'avais configuré comme CGI, au lieu de le charger comme un module. Cela a causé php-cgi.exe pour démarrer et s'arrêter à chaque fois que je faisais une demande. Cela ralentissait mon localhost le développement en baisse.

J'ai modifié les paramètres pour charger PHP en tant qu'Apache. MODULE et maintenant tout fonctionne parfaitement :)

Pour charger le module PHP pour Apache 2.x :

1) insérer 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. De même, remplacez php5apache**.dll par le nom de votre fichier existant.)

2) Pour limiter l'exécution de PHP aux seuls fichiers .php, ajoutez ceci dans le champ httpd.conf :

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

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

PHPIniDir "C:/php"

Merci à tous pour vos efforts.

2 votes

Mon Apache s'arrête lors de l'ajout des lignes comme mentionné dans la Source. Comment dois-je faire sous Windows ?

0 votes

Ce lien a expiré. Utilisez ceci : goo.gl/2EVth9

0 votes

Comment reproduire quelque chose sur mac ?

8voto

Kevin Points 51

Vérifiez si /etc/hosts est correct. Comme ceci :

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

A l'endroit **** donnez votre nom d'hôte.

0 votes

C'était le cas pour moi. Mon domaine était défini dans la ligne ipv4, mais pas dans ipv6.

0 votes

Pareil pour moi. Les requêtes prenaient > 5 sec avant que je mette la ligne supplémentaire dans /etc/hosts. Maintenant, mon matériel fonctionne en ~0.1 sec.

0 votes

Mettez-moi dans la bonne direction. Ajouté à 127.0.0.1 something.atmy.localhost et maintenant la demande ne prend plus 20 secondes. Au lieu de cela, l'apache local répond immédiatement. Je ne connais pas grand-chose aux réseaux. Je suppose que le nom de domaine est résolu trop lentement, parce que quelque chose n'est pas correctement configuré.

7voto

Joel Beckham Points 7455

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 j'ai mis une ligne 127.0.0.1 myproject.local en /etc/hosts

Le problème apparaît parce que 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églé le problème.

0 votes

J'ai utilisé .test mais toujours le même problème

0 votes

@KamelLabiad vous ne devriez pas l'utiliser, c'est un vrai domaine de premier niveau (TLD) : fr.wikipedia.org/wiki/.test

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X