Cet article vous présentera comment utiliser l'analyse xhprof en php7. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Il s'agit d'un document pur. Si vous en avez besoin à l'avenir, vous pouvez le consulter à tout moment pour l'analyse afin de faciliter les tests de code et l'analyse comparative (. prend en charge php7).
docker run -it -p 80:80 -v /Users/xxx/Desktop/xhprof:/data phalcon /bin/bash
Copier le code
Il existe de nombreux xhprofs qui prennent en charge. php7, nous utilisons github.com/longxinH ici /xh… Ce projet.
1.1 Extraire le projet
git clone https://github.com/longxinH/xhprof.git
Copier le code
1.2 Installer le projet
cd xhprof/extension/ /usr/server/php7/bin/phpize ./configure --with-php-config=/usr/server/php7/bin/php-config make && make install
1.3 Ajouter l'extension xhprof.so
Terminer l'exécution, nous devez introduire ce fichier so dans la configuration php.ini
Vérifiez le chemin du fichier php.ini
/usr/server/php7/bin/php --ini Configuration File (php.ini) Path: /usr/server/php7/etc Loaded Configuration File: /usr/server/php7/etc/php.ini Scan for additional .ini files in: /usr/server/php7/etc/php Additional .ini files parsed: (none)
Redémarrez php-fpm.
pour construire un cas est brièvement mentionné
Nous intégrons le code suivant devant la logique à surveiller
编辑 /usr/server/php7/etc/php.ini [Xhprof] extension=xhprof.so xhprof.output_dir=/data/logs
sortie :
Nous avons constaté que deux fonctions de l'extension xhprof ont été appelées. La signification de la valeur de sortie
ct représente le nombre actuel d'appels. à cette fonction. Dans ce cas, c'est tout 1 temps
wt représente le temps nécessaire à l'exécution de la fonction, en microsecondes
En voyant cela, nous constatons que les informations que nous obtenons ne sont pas très nombreuses. , par exemple, nous nous soucions souvent aussi de la mémoire occupée, du processeur et d'autres indicateurs.
\xhprof_enable(); ...... $order = new OrderAdepter(); $result = $order->getUserOrderByOrderNo(123); ...... $xhprof_data = \xhprof_disable(); print_r($xhprof_data);
sortie :
Utilisation statistique de la mémoire XHPROF_FLAGS_MEMORY
XHPROF_FLAGS_CPU compte l'utilisation du processeur
>Nous avons constaté qu'il existe deux champs de sortie pour l'utilisation statistique de la mémoire, mu et pmu. mu représente la mémoire utilisée (octets), et pmu représente l'utilisation maximale de la mémoire (octets)
3.1 À ce stade, nous devons utiliser la bibliothèque xhprof_lib Lorsque nous avons téléchargé la source xhprof. code, le répertoire contenait déjàBien sûr, nous espérons toujours que le Le goulot d'étranglement des performances peut être observé plus intuitivement sous la forme d'un graphique. Voyons comment l'utiliser.
\xhprof_enable( XHPROF_FLAGS_MEMORY +XHPROF_FLAGS_CPU +XHPROF_FLAGS_NO_BUILTINS );
<🎜. >Vous souvenez-vous encore d'une autre configuration lorsque nous avons introduit l'extension xhprof.so ?
Oui, sous le chemin configuré par xhprof.output_dir (vous devez créer le répertoire manuellement)
Si vous êtes intéressé, vous pouvez l'ouvrir et y jeter un œil. Il stocke certaines informations sur les objets sérialisés que nous avons analysés.
3.2 Configurer un service distinct pour accéder à notre analyse. résultats
Nous pointons vers le répertoire xhprof_html dans notre projet xhprof
Je pense que vous comprenez maintenant le rôle de notre run_id et de notre projet dans save_run
La partie supérieure de la nôtre est un aperçu des indicateurs d'interface demandés, et ce qui suit est l'exécution spécifique de chaque fonction appelée .
Signification du nom de champ : Nombre d'appels appelsIncl. Wall Time les appels incluent tout le temps passé par les sous-fonctions, mesuré en microsecondes. Hors Wall TimeLe temps nécessaire à l'exécution de la fonction elle-même, à l'exclusion du temps d'exécution du sous-arbre. mesuré en microsecondes Calculer Incl. L'appel CPU inclut tout le temps CPU passé par la sous-fonction Excl. Le temps CPU passé par l'exécution de la fonction CPU elle-même, à l'exclusion du temps d'exécution du sous-arbre, calculé en microsecondes. utilisé par l'exécution de la sous-fonction, en octets. Calculez la mémoire de l'exécution de la fonction Excl.MemUse elle-même et calculez la valeur maximale de Incl.PeakMemUseIncl.MemUse en octets. 🎜>Les % de terminaisons restants sont les proportions correspondantes
3.3 [Afficher le Callgraph complet]
Vous pouvez également exécuter les deux lignes de code suivantes pour installer
\xhprof_enable(XHPROF_FLAGS_MEMORY + XHPROF_FLAGS_CPU+XHPROF_FLAGS_NO_BUILTINS); ...... $order = new OrderAdepter(); $result = $order->getUserOrderByOrderNo(123); ...... $xhprof_data = \xhprof_disable(); include_once '/data/xhprof-master/xhprof_lib/utils/xhprof_lib.php'; include_once '/data/xhprof-master/xhprof_lib/utils/xhprof_runs.php'; $xhprof_runs = new \XHProfRuns_Default(); $run_id = $xhprof_runs->save_run($xhprof_data, 'your_project'); echo $run_id; //output 5cbf25e21fe9b
Si vous souhaitez visualiser le processus d'appel, vous devez installer la bibliothèque graphique graphviz. Ici, nous vous recommandons d'installer manuellement graphviz 2.24 .0 cette version (montez personnellement sur le piège, 2.40 n'est pas pris en charge)yum install -y libpng yum install -y graphvizCopier après la connexion
Portez une attention particulière aux parties rouges et jaunes, si vous sentez que seulement Si vous souhaitez analyser un certain processus, vous pouvez cliquer sur une méthode et puis cliquez sur [Afficher le Callgraph complet] pour afficher le graphique
4. Le problème
Nous l'avons découvert lors de l'utilisation de xhprof ci-dessus. Forte dépendance, plusieurs classes du package d'installation de xhprof sont introduites dans le code.
yum -y install libtool-ltdl-devel cd /data/graphviz-2.24.0 ./configure make make install
Ici, nous pouvons utiliser la référence du package composer pour réaliser la même fonction. Il est recommandé d'introduire le package pbweb/xhprof. Apprentissage recommandé :Tutoriel vidéo php
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!