Maison >développement back-end >tutoriel php >Méthode 1 d'utilisation de XHProf pour analyser les goulots d'étranglement des performances PHP
wget http://pecl.php.net/get/xhprof-0.9.4.tgz tar zxf xhprof-0.9.4.tgz cd xhprof-0.9.4/extension/ sudo phpize ./configure sudo make sudo make install cd ../
Configurer php.ini
[xhprof] extension=xhprof.so xhprof.output_dir=/tmp
Remarque : xhprof n'a pas été mis à jour depuis longtemps, il ne prend pas en charge php7. php7 peut utiliser https://github.com/phacility/… .
Vous devez copier les deux répertoires du package compressé xhprof dans le répertoire spécifié (en supposant qu'ils soient définis sur /work/xhprof/
) :
mkdir /work/xhprof/ cp -a xhprof_html/ /work/xhprof/ cp -a xhprof_lib/ /work/xhprof/
Puis dans le projet Ajoutez le fichier d'entrée du framework :
xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU); register_shutdown_function(function() { $xhprof_data = xhprof_disable(); if (function_exists('fastcgi_finish_request')){ fastcgi_finish_request(); } include_once "/work/xhprof/xhprof_lib/utils/xhprof_lib.php"; include_once "/work/xhprof/xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof'); });
Analyse du code : $xhprof_data
enregistre tous les temps d'appel des fonctions et la consommation de mémoire CPU pendant l'exécution du programme, et enregistre spécifiquement quels indicateurs peut être transmis via les paramètres de xhprof_enable Control, les paramètres actuellement pris en charge sont :
HPROF_FLAGS_NO_BUILTINS
Ignorer toutes les fonctions intégrées (internes).
XHPROF_FLAGS_CPU
Ajoutez les données du processeur aux données de performances de sortie.
XHPROF_FLAGS_MEMORY
Ajoutez des données de mémoire aux données de performances de sortie. Le traitement après
n'a rien à voir avec l'extension xhprof. Il s'agit en gros d'écrire une classe de stockage XHProfRuns_Default
pour sérialiser et enregistrer $xhprof_data
dans un certain répertoire. XHProfRuns_Default(__DIR__)
to Le résultat est affiché dans le répertoire courant. S'il n'est pas spécifié, le php.ini
dans le fichier de configuration xhprof.output_dir
sera lu. S'il n'est toujours pas spécifié, il sera affiché dans /tmp
.
xhprof_enable
et xhprof_disable
apparaissent par paires, l'un se trouve au début du code en cours d'exécution et l'autre à la fin. Au milieu se trouve le code à analyser.
Après la configuration ci-dessus, si nous demandons ultérieurement l'interface du projet, xhprof analysera le CPU, la mémoire, la consommation de temps, etc. pendant le processus de demande. Les journaux sont enregistrés dans le répertoire xhprof.output_dir
.
Après la configuration, comment vérifier le log ? Nous pouvons construire un serveur web simple :
xhprof.test.com.conf
server { listen 80; server_name xhprof.test.com; root /work/xhprof/xhprof_html; index index.html index.php; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
puis configurer l'hôte virtuel xhprof.test.com. Redémarrez nginx et ouvrez xhprof.test.com pour voir l'effet :
répertorié dans l'interface utilisateur par défaut :
nom de la fonction : Nom de la fonction
appels : Nombre d'appels
Incl. : Temps d'exécution de la fonction (y compris les sous-fonctions)
IWall% : Temps d'exécution de la fonction (y compris les sous-fonctions) proportion
Excl . Temps (microsec) : temps d'exécution de la fonction (hors sous-fonctions)
EWall% : temps d'exécution de la fonction (hors sous-fonctions)
Vous pouvez également voir le lien [Afficher le Callgraph complet] sur le Web. Après avoir cliqué dessus, un graphique d'analyse visuelle des performances peut être dessiné. Si une erreur est signalée après avoir cliqué, cela peut être dû à un manque de dépendance à graphviz. Graphviz est un outil de dessin graphique qui vous permet de visualiser les goulots d'étranglement des performances de manière plus intuitive. Vous pouvez l'installer si nécessaire :
yum install -y libpng yum install -y graphviz
Effet :
Nous l'avons implémenté en ajoutant du code au fonction d'analyse des fichiers d'entrée de projet. Une manière plus élégante est de créer un fichier supplémentaire xhprof.inc.php et de l'enregistrer dans le répertoire /work/xhprof/
:
xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU); register_shutdown_function(function() { $xhprof_data = xhprof_disable(); if (function_exists('fastcgi_finish_request')){ fastcgi_finish_request(); } include_once "/work/xhprof/xhprof_lib/utils/xhprof_lib.php"; include_once "/work/xhprof/xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = new XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, 'xhprof'); });
Utilisez la fonction de chargement automatique de PHP pour injecter ce fichier avant d'exécuter le code et de modifier le php. .ini :
auto_prepend_file = /work/xhprof/xhprof.inc.php
Redémarrez ensuite le service PHP. Cela prendra effet pour tous ceux qui utilisent cet environnement php.
Ou écrivez-le dans la configuration nginx du projet spécifié :
jifen.cc.conf
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PHP_VALUE "auto_prepend_file=/work/xhprof/xhprof.inc.php"; include fastcgi_params; }
Puis redémarrez le service nginx. Cela ne prend effet que pour ce projet.
Les fichiers inclus via auto_prepend_file et auto_append_file seront analysés dans ce mode, avec certaines restrictions, comme la fonction qui doit être définie avant d'être appelée.
Par défaut, xhprof s'exécutera à chaque fois Si l'environnement en ligne est défini comme ceci, cela aura un impact sur les performances.
xhprof.inc.php
<?php $profiling = !(mt_rand()%9); if($profiling) xhprof_enable(XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU); register_shutdown_function(function() use($profiling) { if($profiling){ $xhprof_data = xhprof_disable(); if (function_exists('fastcgi_finish_request')){ fastcgi_finish_request(); } include_once "/work/xhprof/xhprof_lib/utils/xhprof_lib.php"; include_once "/work/xhprof/xhprof_lib/utils/xhprof_runs.php"; $xhprof_runs = new XHProfRuns_Default(); $xhprof_runs->save_run($xhprof_data, 'xhprof'); } });
Dans cet article, nous avons présenté comment analyser les performances PHP en fonction de l'extension xhprof et les enregistrer dans le journal. Enfin, utilisez xhprof pour étendre l'interface utilisateur intégrée afin de l'afficher sur le Web. Principaux points de connaissances :
Installer l'extension xhprof
Injecter xhprof dans l'application
Basé sur nginx Afficher les résultats de l'analyse
Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de tout le monde. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
Recommandations associées :
Notes sur la configuration des paramètres php-fpm pour php7+
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!