Comparaison des sessions de profilage dans XHProf Admin

L'article parle d'un outil pratique pour comparer les sessions de profilage de code PHP, qui a permis de trouver rapidement des goulots d'étranglement dans le projet sur CMS Bitrix.


De loin


En juillet, Bitrix a été mis à jour vers la dernière version de l'époque ... Et la vitesse de chargement des pages a chuté: quelque part de 20%, quelque part de 300 +%. Surtout aux étapes de la commande client.


Les chiffres sont impressionnants et tristes. Pourquoi mis à jour?


N | Solide


C'est-à-dire il y avait un risque que si nous ne mettions pas à jour, nous devions résoudre deux problèmes à la fois: mettre à jour Bitrix et mettre à jour notre base de code vers PHP> 7.1.


Raison des freins


Il s'est avéré que la raison des plus gros freins est la nouvelle logique de code pour travailler avec les profils de livraison. Selon le code, ils l'ont fait plus correctement, ou quelque chose: les expéditions sont apparues comme des entités distinctes. Maintenant, la commande peut être envoyée en plusieurs envois (avec ses propres caractéristiques en termes de coût, de mode de livraison et de composition des marchandises).


Cependant, le profil de livraison est maintenant une entrée distincte dans la base de données avec ses limites par rapport au noyau Bitrix, qui apparaîtra chaque fois que vous aurez besoin de vérifier la possibilité d'afficher ce profil lors de la commande.


En général, l'article ne se concentrera pas sur ce qui a été exactement refait pour faire face aux freins, mais sur un outil qui a permis de trouver rapidement des goulots d'étranglement dans le code et de les corriger.


Administrateur XHProf


À notre disposition était un profileur populaire de Facebook - XHProf. Les inconvénients qui empêchent le fonctionnement de l'outil sont liés à son interface graphique:


  • Manque de navigation claire entre les sessions de profilage
  • Impossibilité de comparer plus de deux sessions simultanément en dehors du même espace de noms.
  • Vous ne pouvez pas les commenter dans la liste des sessions. Après la dixième session, vous oubliez déjà les changements liés aux résultats de profilage précédents.

En conséquence, en regardant les SOURCES de l'interface graphique native XHProf, et, un peu horrifié, une nouvelle interface graphique a été écrite pour lui, couvrant les inconvénients répertoriés.


L'installation


Lien vers le projet


Je ne décrirai pas comment installer XHProf et profile, il y a au moins quelques bons tutoriels sur le Habré.


Pour installer XHProf Admin, placez le dossier xhprof_admin dans le dossier xhprof_html du XHProf natif. Ou clonez l'intégralité du projet (il contient déjà à la fois XHProf et la nouvelle interface graphique).


Ouvrez ensuite la page <Chemin d'accès à xhprof> / xhprof_html / xhprof_admin /
Si le mappage est activé, comme recommandé dans la documentation, vous devez ouvrir <Chemin vers xhprof> / xhprof_admin /


Page d'accueil


N


Contient:


  • Liste de toutes les sessions de profilage triées par date
  • Champs de commentaire de session
  • Choucas avec lesquelles vous pouvez sélectionner des sessions à supprimer, comparer, agréger
  • Lien vers un nouveau rapport
  • Liens vers le rapport natif et le callgraph
  • Champs de pondération de session pour les différences et les agrégats
  • Un champ spécifiant la séquence dans laquelle les sessions seront affichées en mode Comparer et également en mode Diff
  • Boutons:
    • Comparer - compare les sessions sélectionnées (nouveau rapport)
    • Diff - un rapport standard pour comparer les sessions dans un espace de noms
    • Agrégation - rapport standard avec agrégation de session dans un espace de noms
    • Enregistrer les commentaires personnalisés - enregistre le commentaire de la session (dans un fichier séparé)
    • Supprimer les exécutions sélectionnées - supprime les fichiers de session et les fichiers de commentaires
    • Lien vers la page de liste des sessions natives

Afficher le rapport d'origine, les exécutions Diff, les exécutions agrégées, Afficher le graphique d'appel - les fonctionnalités natives de l'interface graphique XHProf - Je ne les décrirai pas. Je peux seulement dire que XHProf Admin vous permet de naviguer facilement vers eux, plutôt que de compiler manuellement des liens.


Comparer les courses


N | Solide


Un nouveau rapport qui vous permet d'évaluer rapidement la croissance ou la régression de la productivité.
Pour l'utiliser, sur la page principale:


  • Sélectionnez les sessions que nous voulons comparer.
  • Nous définissons le champ de tri "Trier" pour déterminer l'ordre dans lequel les sessions sont affichées: plus la valeur du champ est petite, plus la session sera affichée tôt. La toute première session sera considérée comme la session de base - toutes les sessions suivantes seront comparées avec elle.
  • Si nous voulons afficher les valeurs moyennes des métriques, cochez "afficher la moyenne".
  • Cliquez sur "Comparer".
    N | Solide

Le rapport n'affiche pas le% que la fonction «occupe» pour chaque métrique afin de ne pas encombrer la page, mais affiche des valeurs absolues. S'il existe une différence de plus de 1% dans la métrique pour la fonction en cours de profilage entre la session de base et la session suivante, cela est clairement indiqué: le vert indique une amélioration, le rouge indique une régression.


Par défaut:


  • Le rapport affiche les 100 premières fonctions. Si vous en avez besoin de plus, cliquez sur "Tout afficher".
  • Les données sont triées par le «Incl. Wall Time (microsec) ", mais vous pouvez cliquer sur n'importe quelle mesure et trier par elle.

Pour exclure une session du rapport, cliquez sur "exclure".


Le tri par chaque métrique est disponible - cliquez simplement sur l'en-tête de colonne.


Pour afficher les valeurs moyennes de toutes les sessions sélectionnées, cliquez sur «Afficher les valeurs moyennes».


Pour un zoom avant sur une fonction, vous pouvez cliquer sur une cellule à l'intersection de la fonction et de la métrique avec la session affichée.


N | Solide


Exemple d'utilisation


  1. Nous avons démarré le profileur sur le code source. Nous avons ouvert la liste des sessions et y avons ajouté un commentaire.
  2. Nous avons commencé le profileur sur le code amélioré. A également ajouté un commentaire.
  3. A fait le point 2 plusieurs fois.
  4. Ensuite, nous avons ouvert la liste des sessions de profilage, sélectionné séquentiellement toutes les sessions et cliqué sur Comparer.
  5. Nous avons examiné les changements.
  6. Ils ont décidé quoi d'autre pour accélérer.

XHProf Admin est idéalement utilisé pour identifier les fonctions lourdes couramment utilisées qui sont exécutées par un seul utilisateur. Par exemple, dans Bitrix, lors de la passation d'une commande lors du passage d'une étape à une autre (livraison, paiement, contacts, etc.) à chaque fois qu'un certain nombre de fonctions sont appelées pour contrôler l'intégrité du panier, etc. Ces étapes sont profilées séparément puis affichées ensemble dans le rapport Comparez. Les résultats de ces fonctions peuvent être mis en cache, ce qui accélère considérablement le temps de transition d'étape en étape.


Résumé


En conséquence, nous avons stabilisé la baisse de vitesse aux étapes de la passation d'une commande lors de la mise à jour de Bitrix, analysant simultanément d'autres sections du site et les accélérant.
De temps en temps, nous utilisons XHProf Admin sur les projets comme une interface graphique plus intuitive.
Lien de documentation vers XHProf Admin: allez


Qui s'intéresse au sujet de l'optimisation du code et des outils pour cela, écrivez dans les commentaires.

Source: https://habr.com/ru/post/fr478858/


All Articles