Temps de chargement - Test de performance

Petit nouveau ! | 6 Messages

13 mai 2011, 23:36

Bonjour à tous,
J'ai un assez gros problème de temps de chargement des pages sur le serveur d'un client, je vous expose mon problème :

Donc j'ai 2 serveurs :

Le mien :
Un mutualisé chez OVH, 90plan, qui est l'equivalent de l'offre "Pro" 100Go aujourd'hui
Systeme Linux (je n'ai pas trouvé plus d'info sur l'OS)
PHP 5.2.17
Donc hébergement plutot classique


Le serveur de mon client :
Un serveur dédié chez Ikoula
CPU GenuineIntel, Intel(R) Xeon(R)CPU X3330 @ 2.66GHz
4 go de ram, 2x1 to sata raid 1 hard
Systeme CentOS 5
PHP 5.2.10
Donc logiquement + puissant que mon serveur.


J'ai fait ce petit script en PHP pour tester :
for($i=0;$i<10000;$i++)
{
 echo "<div></div>";
}
J'ai mis les bonnes fonctions avant et apres pour recuperer le temps de chargement de la page.

Resultat :

Mon serveur : Temps de chargement entre 0.01 et 0.03s
Serveur de mon client : Temps de chargement entre 0.21 et 0.33s

On voit deja une différence ...

--------------------------------------------------

Ensuite, dans le div j'ai ajouté un id, donc :
echo "<div id='test'></div>";
Resultat :

Mon serveur : Temps de chargement entre 0.01 et 0.04s
Serveur de mon client : Temps de chargement entre 0.33 et 0.47s

--------------------------------------------------

Maintenant avec un id qui fait 40 caracteres :

Resultat :

Mon serveur : Temps de chargement entre 0.01 et 0.07s
Serveur de mon client : Temps de chargement autour de 1.5s

--------------------------------------------------

J'ai poussé le vice un peu plus loin avec un id de 5000 caracteres ( a peu pres )

Resultat :

Mon serveur : Temps de chargement entre 0.6 et 1s
Serveur de mon client : Temps de chargement de 73s !

--------------------------------------------------

Ca n'a rien a voir avec l'id lui même, a la base j'avais des onclick, onmouseover, onmouseout etc avec plusieurs fonctions js dans chaque et ca donnait le même résultat. Donc ca a l'air de venir de la taille des "infos" du div.

Voila donc si quelqu'un a une idée ou une piste pour régler ce problème ...
Merci d'avance :)

devlop78
Invité n'ayant pas de compte PHPfrance

14 mai 2011, 00:18

Certainement dû à la configuration de PHP et du système. Il faudrait comparer à config égale. Par exemple, même si je trouverais ça étonnant, regarder du côté de ob. Peut-être une différence de configuration entre php et la sortie.

As-tu essayé avec des boucles sans sortie "echo" ? Juste avec des calculs, des instanciations, des ouvertures de fichiers ?

Petit nouveau ! | 6 Messages

14 mai 2011, 00:43

Salut, non en effet ca semble etre liés aux "echo"
Tu aurais une piste ?

Merci d'avance.

devlop78
Invité n'ayant pas de compte PHPfrance

14 mai 2011, 04:03

Il faut voir sa config. Mais j'ai du mal à comprendre ce qui peut pousser jusqu'à 73 secondes ...

Regardes déjà si ob_start n'est pas implicitement appelé ou l'inverse (compare ta config avec la sienne). Regarde aussi si il n'y a pas de scripts en "append", qui s'execute après le tiens, et qui effectuerait un parsage de la sortie, par exemple. Regarde aussi le nombre d'octets configurés pour un ob_flush implicitement appelé. Enfin ... Je n'en sais rien en fait ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 mai 2011, 09:26

salut,

effectivement faudrait tester sur des conf identique de php, voir de version.

Je m'étonne des 73s quand, par défaut, le time out est de 30s ;)

n'y aurait il pas un parse du html automatique (tidy ou autre ?)

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 6 Messages

14 mai 2011, 09:53

Salut,
Merci pour vos réponses.

Je ne suis pas super calé donc j'ai un peu de mal a verifier ce que vous m'indiquez.

Pour le timeout il est sur 480.

J'ai comparé les 2 configs avec phpinfo() et j'ai vu par exemple que sur le serveur de mon client ( ou c'est lent ) il y a bzip2 d'activé et pas sur le mien.

Apres pour savoir si ob_start est implicitement appelé, je peux le voir ou ? pareil pour ob_flush, je la trouve ou cette info ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 mai 2011, 13:01

cela peut venir de
implicite_flush
output_handler (mais la j'y crois pas trop)
output_buffering (comme l'indique devlop78)
tidy clean_output


ce sont les possibilités que je vois si le pb n'arrive qu'a l'affichage (d'après ta réponse a la 1ere question de devlop78)

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 6 Messages

14 mai 2011, 14:51

Ah le output_buffering est a 4096 sur le serveur de mon client et a "no value" sur le mien !
output_handler et implicite_flush sont sur off
je n'ai rien trouvé a propos de "tidy" dans la config php

J'ai testé de passer output_buffering a off dans un htaccess mais ca n'a pas l'air d'avoir fonctionné :

Code : Tout sélectionner

php_flag output_buffering off
Je tenterai ce soir de modifier directement dans le php.ini

En esperant que ce soit ca :)

Merci

Petit nouveau ! | 6 Messages

15 mai 2011, 11:11

Bon j'ai changé la directive dans php.ini mais ca n'a rien changé :(
J'ai donc essayer avec output_buffering = Off et avec output_buffering = 0 mais non
J'ai bien redemarré apache et verifié dans phpinfo() que la valeur avait bien été mise a jour.

Une autre idée ? :s

Merci pour votre aide.

Petit nouveau ! | 6 Messages

25 mai 2011, 12:03

Bon,
L’hébergeur n'a pas été capable de trouver la source du problème mais j'ai réussi a le "contourner" en utilisant la compression http://www.en1heure.com/compresser_ses_ ... eflate.php

Et la c'est nikel, le temps de transfert des données est quasi instantané.

Voila voila :)

Eléphant du PHP | 275 Messages

25 mai 2011, 12:21

Ben, 10000 fois 5000 caractères, ça fait un peu plus de 47Mo à transférer. Si en plus de ça ca flush tous les 5000 caractères, oui, ca peut poser problème.

Le coup de la compression gzip évite les flushs a répétitions ET la taille à envoyer.