cyberlaura Posté 22 Février 2009 Posté 22 Février 2009 Bonsoir à tous, j'ai eu l'idée cet après-midi de chronométrer l'ensemble des pages de mon site et d'extraire les pages les plus lentes dans un fichier texte pour voir... Ce sont des pages qui pour la plupart sont quasiment en pur HTML avec quelques codes secondaires en PHP, sans accès SQL. Donc après avoir découvert un (très) fort ralentissement dû à la création d'un fichier de statistiques - ou plutôt à l'appel de la fonction gethostbyaddr - fonction que j'ai naturellement supprimée, je me retrouve encore avec des pages très lentes. Je ne récupère que les pages que PHP met plus de 4 secondes à me générer, et j'en ait environ 1 toutes les 2 minutes, pour une durée allant de 4 à 27 secondes. Je précise que le serveur est très peu utilisé, par exemple en ce moment load average à 0.1 et malgré tout j'ai encore des pages lentes. Donc au final, je voudrais vous mettre en garde contre gethostbyaddr, mais aussi vous demander si vous connaissez une explication à ce délai anormal et irrégulier de génération de page... Et sur ce, bonne nuit à tous
Leonick Posté 22 Février 2009 Posté 22 Février 2009 moi je l'utilise pour tous mes sites sans avoir de débordement au niveau du temps de création des pages (bien inférieur à la seconde)
Dadou Posté 22 Février 2009 Posté 22 Février 2009 C'est simplement du aux temps de réponses des DNS, puisqu'une interrogation est faites a ces derniers à chaque utilisation de la fonction gethostbyaddr
cyberlaura Posté 23 Février 2009 Auteur Posté 23 Février 2009 merci de vos réponses, j'avais effectivement bien compris que gethostbyaddr me prenait un temps fou, et je l'ai donc totalement supprimé. Pour autant, j'ai toujours des temps de réponse délirants que je ne m'explique pas, mais beaucoup moins cependant. J'ai aussi effectué une trace des pages avec un temps "normal", et j'ai une moyenne correcte ? de 300ms (de 13 ms à 500ms pour la majorité ). Donc pour l'instant, je sèche sur la raison de ces lenteurs.. Sauf que la majorité des ip concernées par cette lenteur viennent de l'étranger... Peut-être me reste t-il un gethostby.... dans un coin, je vérifie.... Ou bien existe t'il d'autres ordres php de ce style ?
destroyedlolo Posté 23 Février 2009 Posté 23 Février 2009 J'utilise PHP 5.2 et Apache 2.2 sur des machines tres lentes (par exemple, la magorite des mes sites tournent sur une vielle SparcStation 20 datant du dernier millenaire) et ca fonctionne pas mal : Les latences que je notes sont principalement due a ma connexion ADSL et non au serveur lui-meme, meme lorsque les stats tournent en tache de font. Voici quelques pistes que tu peux explorer : Appel reverse DNS par apache pour generer les logs (verifier que la config contient HostnameLookups Off). Dans le cas contraire, il y aura un appel DNS pour chaque client. Memoire : meme s'il n'y a pas de process swapper, l'OS a parfois besoin de reorganiser sa memoire avant de creer un nouveau process. C'est surtout vrais si tu as des pages ou des applies en taches de font qui consomment beaucoup de memoire. PHP en mode CGI nombre de process apache trop reduit : dans ce cas, si la page contient beaucoup de "sous elements" comme des images, il est possible que le client doivent attendre que tout ces elements soient disponnibles avant de generer la page. La solution est alors d'augmenter le nombre de process Apache, mais aussi de specifier la taille de toutes les images des pages : ainsi les pages seront affichees complements meme si toutes les images ne sont pas encore transferer. Visuellement c'est mieux meme si ca ne change pas grand chose techniquement. Voila ce qui me vient a l'esprit, il y a sans doute d'autres trucs ... Bye Lolo
cyberlaura Posté 23 Février 2009 Auteur Posté 23 Février 2009 Merci pour toutes ces pistes Lolo. ça m'aide bien à avancer En fait, les durées ne dépendent pas de la connexion elle-même, car je mesure directement le temps que met le code à s'exécuter sur le serveur. Pour cela, j'ai initialisé auto_prepend_file et auto_append_file et j'initialise un chrono dans le fichier auto_prepend_file, et j'écris le temps passé dans le fichier auto_append_file. La durée ne dépend donc que du serveur lui-même, pas de mon ADSL ou de la taille des images. Pour tes pistes : - j'ai bien HostnameLookups à off, c'est vrai que ça ressemblait bien à ça pourtant. - mon serveur a swappé dernièrement, ce qui est rare et peut effectivement dégrader les performances. Je le rebooterais bientôt pour voir si cela change quelque chose. - PHP n'est pas en mode CGI - MinSpareServers est à 5, mais j'ai fait un essai hier soir vers minuit et il y avait très très peu de monde qui naviguait. Actuellement, j'ai 22 pages par heure qui mettent plus de 4 secondes, et en vérifiant les IP qui posent problème, elles sont effectivement surtout de l'étranger. Hostnamelooksup est à off dans mon httpd.conf, c'est bien là qu'il faut regarder ?
destroyedlolo Posté 23 Février 2009 Posté 23 Février 2009 (modifié) - MinSpareServers est à 5, mais j'ai fait un essai hier soir vers minuit et il y avait très très peu de monde qui naviguait. Je pensais plutot au directive MAX???? qui limitent le nombre de clients (monter trop haut ne sert a rien non plus, risque de swap sinon) Hostnamelooksup est à off dans mon httpd.conf, c'est bien là qu'il faut regarder ? Ben, c'est simple : ton log ne doit contenir que des adresses IP et non des noms. Autres pistes : si tu proteges des pages, il ne faut pas que ce soit en utilisant des noms de domaines (y compris pour les domaines locaux) : il ne faut utiliser que des IP sinon ... lookup sur le DNS. Tu utilises du https ? Si oui, c'est plus lent. De plus, suivant la config que tu utilises, il se peux que SSL verifie le client -> a nouveau lookup. Si ca persiste, je te conseille d'utiliser un sniffer de trames IP pour t'assurer qu'il ne reste plus de requette DNS. Dans ce cas, le probleme sera a chercher ailleurs ... Modifié 23 Février 2009 par destroyedlolo
cyberlaura Posté 23 Février 2009 Auteur Posté 23 Février 2009 (modifié) Il n'y a bien que des IP dans mes logs. Je n'utilise pas Https je ne protège pas de page Et j'arrive à reproduire le problème en utilisant un lointain proxy ( du canada ), ce qui me laisse supposer qu'il s'agit bien d'un problème de DNS. Juste une dernière question, je t'ai suffisamment fait perdre de temps pour aujourd'hui et je t'en remercie encore, mais si j'ai une directive du type sshd: .sivit.orghttpd: ALL dans mon hosts.allow, cela implique un lookup DNS systèmatique ? NOTA : je viens d'effectuer une trace de mon passage avec ou sans proxy, et systématiquement avec ce proxy la page met 1500 ms à se générer, et 350 ms sans proxy ( 221.11.27.110 est le proxy, 81.56.000.000 est mon IP ) 2009-02-23 18:48:30 : 221.11.27.110 www.xxxxxxx.com/consulter-annonces.php : 1463 ms2009-02-23 18:49:43 : 221.11.27.110 www.xxxxxxx.com/consulter-annonces.php : 1460 ms2009-02-23 18:50:14 : 81.56.000.000 www.xxxxxxx.com/consulter-annonces.php : 339 ms2009-02-23 18:50:34 : 221.11.27.110 www.xxxxxxx.com/consulter-annonces.php : 1470 ms2009-02-23 18:50:47 : 81.56.000.000 www.xxxxxxx.com/consulter-annonces.php : 374 ms Modifié 23 Février 2009 par cyberlaura
cyberlaura Posté 23 Février 2009 Auteur Posté 23 Février 2009 Et bien, en réalité, il s'agissait d'un faux problème. Je m'explique : je croyais - bêtement - que la page était générée, puis envoyée d'un bloc au "client". Donc je pensais que mon chronométrage ne concernait que PHP. Or, après plusieurs tests, je viens de me rendre compte que les données sont envoyées au fur et à mesure - tous les 16 Ko pour moi - et que apache attend donc que ce soit fini avant de continuer la création de la page, d'où des durées de création de la page dépendant de la vitesse de connexion de l'internaute. Du moins je crois qu'il s'agit bien de cela... Donc merci à tous et particulièrement à destroyedlolo pour votre aide
Kioob Posté 23 Février 2009 Posté 23 Février 2009 Bonsoir, si c'est bien ça le problème, je t'invite à activer la compression des pages de PHP : soit modifier directement zlib.output_compression dans le php.ini ou bien ajoutant ini_set('zlib.output_compression', true); en début de script.
cyberlaura Posté 23 Février 2009 Auteur Posté 23 Février 2009 Et bien, cette idée me semble excellente en effet. D'abord parce qu'ainsi, le temps de génération des pages est réel et je peux donc optimiser à bon escient, et ensuite parce que j'ai réellement un gain d'environ 15 à 20 % pour que la page s'affiche. Merci beaucoup pour me l'avoir soumise, je vais laisser cette compression quelques temps pour voir comment le serveur réagit, car je suppose qu'il a un peu plus de boulot pour compresser et que cela risque - peut-être - de nuire à ses performances. Quelle bonne journée, j'ai appris plein de trucs, encore merci à tous
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant