Fresche Solutions

Diagnostic de performance avec PHP sur l’IBM i

août 16, 2018
Chelsea Fenton

Donc, vous avez une application PHP exécutée sur votre IBM i, mais vous commencez à recevoir des plaintes concernant sa performance. Que faire? Où regardez-vous? Certains des conseils ci-dessous pourraient bien vous donner une longueur d’avance.

Ne sautez pas aux conclusions !

Avant toute chose, ne sautez pas aux conclusions en ce qui concerne la cause du problème de performance. Il est si facile de perdre son temps avec des hypothèses ou en se mettant sur un mauvais chemin sans le savoir.

Vous trouverez ci-dessous quelques outils et techniques pour vous aider à trouver vos goulots d’étranglement. Si vous en avez, utilisez-les – les informations fournies sont inestimables.

Outils/technique

Interface Web ZendServer

Si vous avez un abonnement ou un forfait d’essai avec ZendServer, cela veut dire que vous avez accès à l’interface Web ZendServer, qui regorge d’informations utiles. Assurez-vous que l’instance apache ZendServer soit en exécution (ZENDSVR6 or ZENDPHP7).

En termes de performance, l’interface vous indique les pages qui prennent le plus longtemps, celles qui sont les plus utilisées, et vous donne même différentes traces indiquant les pages où les utilisateurs passent le plus de temps.

Z-Ray

Z-Ray est un outil additionnel de ZendServer qui peut être activé via l’interface Web de ZendServer. Z-Ray fournit une barre d’outils de développement qui apparaît dans la fenêtre de votre navigateur. Il peut vous montrer exactement combien de temps la page actuelle a pris, y compris une ventilation du temps nécessaire pour le traitement PHP, l’accès à la base de données et le rendu. Il affichera également des informations sur chaque appel Ajax. Et ma préférée est une liste de toutes les requêtes de base de données pour la page en cours et leurs performances. Je suis souvent surprise du nombre de requêtes effectuées pour une page.

Registre du temps

Vous n’avez aucun des outils ci-dessus? Vous pouvez toujours utiliser PHP pour déterminer les goulots d’étranglement des performances. Bien que le diagnostic prenne plus de temps, vous pouvez utiliser un code comme l’extrait de code ci-dessous pour collecter des informations de synchronisation exactes. Je préfère me connecter à la base de données pour pouvoir collecter des moyennes de performances et d’autres informations utiles. Vous pouvez également coder ceci de telle manière que la journalisation des performances puisse être activée et désactivée en fonction d’un indicateur de débogage.

Registres

Votre accès Apache et les journaux d’erreur PHP fournissent également une mine d’informations. Examinez souvent vos journaux d’erreurs pour obtenir des indices sur les problèmes existants. Les journaux d’accès peuvent également être très utiles pour déterminer les pages souvent utilisées, susceptibles de créer une charge sur le serveur. Par exemple, soyez prudent en utilisant un grand nombre de requêtes ‘ping’ fréquentes sur le serveur. Même si ces appels sont petits et rapides, s’ils sont effectués trop souvent, ils peuvent ralentir le temps de réponse pour l’ensemble de l’application. De nombreux outils sont disponibles pour importer et analyser vos journaux.

Les journaux PHP peuvent se remplir rapidement et devenir assez volumineux. Lorsque cela se produit, l’ouverture du journal pour y écrire peut provoquer un problème de performances. Essayez de renommer votre journal d’erreurs PHP régulièrement.

 

Vous avez trouvé le goulot d’étranglement – et maintenant ?

D’ACCORD! Vous avez donc trouvé la cause du problème. Que pouvez-vous y faire? Vous trouverez ci-dessous des problèmes courants auxquels j’ai fait face, ainsi que les pistes de solutions.

Base de données

Les requêtes de base de données figurent en tête de liste des problèmes de performances. Trop de requêtes ou des requêtes trop complexes sur une page peuvent ralentir le tout. Soyez à l’affût des requêtes effectuées dans une boucle et voyez s’il existe un moyen de retravailler votre structure pour éliminer ce besoin – une jointure supplémentaire, peut-être.

Retouche de SQL

Examinez votre code SQL pour voir s’il existe un moyen plus simple d’écrire vos requêtes.

Si vous avez un système d’exploitation plus ancien, évitez d’écrire des requêtes qui doivent utiliser l’ancien « moteur de requête classique » (classic query engine, CQE). Pour plus d’informations, consultez la documentation du répartiteur de requêtes pour votre système d’exploitation – par exemple.

 

Utiliser le conseiller d’index

Une fois que vous avez finalisé les requêtes que vous utiliserez, exécutez-les via le « Index Advisor » de votre outil « IBM i Access Client Solutions ». Commencez avec l’exécution des scripts SQL, entrez votre requête et cliquez sur « Visual Explain ». Cela vous montrera comment votre requête sera exécutée. Sélectionnez ensuite « Index Advisor » dans le menu et vous obtiendrez une liste d’index susceptibles d’améliorer les performances de cette requête. Il va même les créer pour vous ou générer la source SQL.

Ajax

Utilisez Ajax sur votre page pour charger différentes pièces qui peuvent prendre beaucoup de temps. Un utilisateur pardonne davantage les problèmes de performance s’il voit des choses changer sur son écran. N’oubliez pas d’utiliser une indication visuelle, telle qu’une roue qui tourne, pour montrer que quelque chose est en chargement.

Compression

Activez la compression sur votre serveur Apache. Cela aidera à accélérer le temps de transfert des données entre le serveur et le client.

https://httpd.apache.org/docs/2.4/mod/mod_deflate.html

Cache

La cache est votre ami. Si le traitement n’a pas besoin d’être répété, ne le répétez pas. Mais réfléchissez à ce qui devrait et ne devrait pas être mis en cache. Est-ce une donnée qui ne sera pas souvent mise à jour?

CSS/JS/Images

Les feuilles de style CSS, JavaScript et les images sont de bons candidats pour la mise en cache. Ajoutez quelque chose comme ceci à votre config apache:

Notez que vous pourriez vouloir implémenter un contournement de la cache lorsque vous mettez à jour votre CSS ou votre JavaScript. Vous pouvez utiliser quelque chose comme ça en définissant une variable de version quelque part dans votre PHP.

ZendCache

ZendCache est un autre outil servant à mettre en cache les données dans PHP. Il peut être utile de mettre en cache des informations que vous avez pu extraire d’une base de données ou d’un appel de service Web et que vous n’avez pas besoin de mettre à jour souvent.

https://docs.zendframework.com/zend-cache/

Les boucles

Le ralentissement est-il dans le code PHP ? Les boucles sont fondamentales pour la programmation, mais faites attention à ce que vous mettez dans les boucles. C’est un très mauvais signe s’il y a beaucoup de traitement dans une boucle qui pourrait être exécutée des centaines de fois. Les plus gros coupables sont les requêtes de base de données et les appels RPG/CL.

Les lots

Il n’est pas obligatoire de fournir tout de manière interactive au client. Il se peut que vous ayez des opérations de traitement intensives qui seraient mieux soumises en tant que traitement par lots. Un exemple que je rencontre souvent est la génération de PDF. Une fois le traitement effectué, envoyez à l’utilisateur une notification dans le navigateur ou par courrier électronique. Vous pouvez même soumettre PHP en lot depuis PHP :

Outils à jour

Dans la mesure du possible, gardez vos outils à jour pour profiter des améliorations de performances apportées. Cela pourrait inclure PHP et ZendServer, tous les outils tiers que vous utilisez et votre IBM i lui-même.

En résumé

J’espère que certains de mes conseils peuvent vous aider à tirer profit de votre application PHP et vous faire économiser du temps et des maux de tête.


S’inscrire au Blog

Articles Similaires

cross