Passage de PHP4 à PHP5 : fonctionnement très ralenti

Petit nouveau ! | 2 Messages

05 déc. 2007, 18:32

Bonjour.

J'ai migré une application d'un ancien serveur sous SUSE 9 tournant avec PHP4 et une base Mysql v. 4 vers un nouveau serveur, plus rapide, sous SUSE 10 exécutant PHP5 en relation avec une base Mysql v. 5. Sans trop me prendre la tête, je me suis cantonné à recopier le code et un dump des base sur le nouveau serveur. Après un ou deux petits aménagements marginaux (renommer les occurrences de $HTTP_COOKIE_VARS en $_COOKIE, entre autres), mon application tourne.

Cependant, l'exécution en est considérablement ralentie, au point que la page principale (un tableau de 80x60 colonnes) ne parvient pas à se charger complètement.

Lorsque en exécutant le code sur le nouveau serveur j'attaque les bases de l'ancien, le fonctionnement est ralenti de façon similaire. A l'inverse, la différence de version entre le client MySQL de l'ancien et le serveur du nouveau m'empêche de voir si le code en php4 est ralenti aussi en attaquant la base en MySQL v. 5.

Nonobstant, je tendrais à incriminer la version PHP5. J'ai de l'ordre de 5000 lignes de code, construit par couches successives, parfois à plus de 4 mains, et j'ai du mal à m'y retrouver moi-même, donc je vous épargnerai les exemples, mais je voudrais savoir si ce problème de lenteur au passage à PHP5 est connu, et si des techniques simples sont applicables pour y remédier.

L'alternative étant de tout reprendre à zéro ou presque...

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

05 déc. 2007, 18:58

je voudrais savoir si ce problème de lenteur au passage à PHP5 est connu
Pas par moi en tout cas. D'ailleurs, tu n'es pas sûr que le problème ne provient pas d'une requête qui opère différemment sous MySQL 4 et MySQL 5, me trompe-je ?

Mon conseil : installe XDebug et active le profiling. Exécute la page en question (puis désactive le profiling sinon ton disque dur va se remplir de fichier de profiling pour rien) puis jette un œil au résultat via KCacheGrind/WinCacheGrind. Au pire, si tu archives le fichier de profiling par 7zip et le mets quelque part où je peux le télécharger, j'y jeterai un œil pour toi.

Le profiling permet d'identifier instantanément la cause des ralentissements.

Mammouth du PHP | 684 Messages

07 déc. 2007, 16:21

Le profiling est une bonne idée. J'ajouterai qu'il faut plusieurs fichiers pour obtenir plusieurs mesures.
Regarde aussi du cote des extensions PHP. Tu charge peut être toutes les extensions alors qu'il ne t'en faut qu'une dizaine (voir php.ini).

Sous Linux, tu peux regarder les performances de la machine avec les commandes 'top', 'pstree', 'ps aux'. Regarde si des options de mysql peuvent être activées pour voir les statistiques.
Zigz4g