Maison >développement back-end >tutoriel php >Méthode 1 d'utilisation de XHProf pour analyser les goulots d'étranglement des performances PHP

Méthode 1 d'utilisation de XHProf pour analyser les goulots d'étranglement des performances PHP

不言
不言original
2018-07-07 15:34:531386parcourir

Installer l'extension xhprof

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/… .

Configuration de l'environnement xhprof

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.

Configuration du web

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 :


Méthode 1 dutilisation de XHProf pour analyser les goulots détranglement des performances PHP

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 :
Méthode 1 dutilisation de XHProf pour analyser les goulots détranglement des performances PHP

Introduction non intrusive de xhprof

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.

Modifier la fréquence d'échantillonnage

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(&#39;fastcgi_finish_request&#39;)){
            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');    
    }
});

Résumé

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+

Résoudre le problème selon lequel la sélection dans laravel-admin ne peut pas sélectionner automatiquement la valeur actuelle lors de la modification du formulaire

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn