Maison > Article > développement back-end > Comment utiliser xhprof pour tester les performances de PHP en PHP7 ? (Présentation de la méthode)
Introduction
1 Contexte
L'extension xhprof de PHP Facebook ne sera plus mise à jour et maintenue car Facebook a entièrement utilisé HHVM et n'utilise plus le moteur PHP zend.
xhprof ne prend pas en charge la nouvelle version de PHP (PHP7). L'extension tideways est issue du projet xhprof et continue d'être maintenue pour le moment. 5.6 et 5.5.
tideways est un projet open source. Il ne facture que les services d'interface utilisateur. En fait, xhgui peut répondre pleinement à nos besoins quotidiens
2 Fonctions
Tideways est une extension utilisée pour tester les performances de PHP. Elle peut obtenir les fonctions appelées pendant tout le processus d'exécution de PHP, le nombre d'appels de fonctions, le temps d'exécution. , temps CPU et utilisation de la mémoire, pic de mémoire, temps d'exécution total, temps CPU total, utilisation totale de la mémoire, pic de mémoire total et autres données, analysez les données ci-dessus pour découvrir le goulot d'étranglement des performances de PHP, analysez le processus d'exécution de PHP, etc.3 Avantages
4 Inconvénients
Bien que non intrusive, si des logs d'exécution sont générés pour chaque interface, la consommation de CPU et de mémoire n'est pas négligeable.5 Principe de mise en œuvre
Application
Les deux méthodes d'application suivantes sont présentées :Intrusive et Non invasive
Le mode intrusif fait référence à l'ajout de code au code, et le mode intrusif utilise l'interface utilisateur par défaut. Le mode non intrusif fait référence à l'ajout de code sans apporter de modifications au code. Modifiez nginx/apache pour implémenter l'injection de code, en utilisant xhgui de manière non invasive ; Installeztideways_xhprof
git clone "https://github.com/tideways/php-xhprof-extension.git" cd php-xhprof-extension phpize ./configure --with-php-config=/usr/local/php7/bin/php-config make sudo make installAjoutez l'extension=tideways_xhprof.so
Non intrusif :<?php
tideways_xhprof_enable();
// your application code
$data = tideways_xhprof_disable();
file_put_contents(
sys_get_temp_dir() . "/" . uniqid() . ".yourapp.xhprof",
serialize($data)
);
// $data = tideways_xhprof_disable();
// file_put_contents(
// sys_get_temp_dir() . "/" . date('His', time()) . ".material.xhprof",
// serialize($data)
// );
Le fichier .xhprof généré ici se trouve dans le répertoire tmp. L'interface utilisateur par défaut recherchera également .xhprof dans le répertoire tmp. . Fichiers
Installez l'interface utilisateur par défaut pour rechercher des donnéesgit clone git@github.com:phacility/xhprof.git
Installez les répertoires
de ce référentiel dans votre Web. dossier et naviguez xhprof_lib
pour voir la liste des traces. xhprof_html
xhprof_html/index.php
Si vous souhaitez voir les notes d'appel de fonction, vous devez installer Callgraph
Installer CallgraphCallgraph est en fait un une combinaison de trois outils devient.
L'un est cflow ou calltree, qui est utilisé pour générer un arbre d'appel de fonction C. Ce qui suit présente principalement cflow.
Un outil pour travailler avec le langage graphique de texte par points, amélioré par graphviz.
Un script pour convertir l'arbre d'appel de fonction C au format point : tree2dotx
Prenons Ubuntu comme exemple, installez-les respectivement :
sudo apt-get install cflow graphviz
Installez ensuite tree2dotx et Callgraph , les voici sont installés dans /usr/local/bin par défaut.
wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/tree2dotx wget -c https://github.com/tinyclub/linux-0.11-lab/raw/master/tools/callgraph sudo cp tree2dotx callgraph /usr/local/bin sudo chmod +x /usr/local/bin/{tree2dotx,callgraph}
Les deux rendus suivants sont affichés :
>L'utilisation intrusive de xhgui nécessite mongodb
Installer xhgui git clone git@github.com:perftools/xhgui.git
Configurer Nginx
server {
listen 80;
server_name site.localhost;
root /Users/markstory/Sites/awesome-thing/app/webroot/;
fastcgi_param PHP_VALUE "auto_prepend_file=/home/www/xhgui/external/header.php"; #这里依据个人目录而配
}
Ce que cela signifie ici, c'est d'exécuter header.php avant d'exécuter le code php du projet, afin que pour atteindre l'objectif de performances de détection non intrusives
configuration xhgui (Fréquence de génération des journaux) Dans config/config.default de xhgui. php, le nombre de hits d'échantillonnage peut être défini
;return rand(1, 100) === 42; 为1%的采样率,改成return True;则标识每次都采样
'profiler.enable' => function() { // url 中包含debug=1则百分百捕获 if(!empty($_GET['debug'])){ return True; }else{ // 1%采样 return rand(1, 100) === 42; } }
mongodb的配置
xhgui/config/config.default.php
// Can be either mongodb or file. /* 'save.handler' => 'file', 'save.handler.filename' => dirname(__DIR__) . '/cache/' . 'xhgui.data.' . microtime(true) . '_' . substr(md5($url), 0, 6), */ 'save.handler' => 'mongodb', // Needed for file save handler. Beware of file locking. You can adujst this file path // to reduce locking problems (eg uniqid, time ...) //'save.handler.filename' => __DIR__.'/../data/xhgui_'.date('Ymd').'.dat', 'db.host' => 'mongodb://127.0.0.1:27017', 'db.db' => 'xhprof',
mongo > use xhprof > db.results.ensureIndex( { 'meta.SERVER.REQUEST_TIME' : -1 } ) > db.results.ensureIndex( { 'profile.main().wt' : -1 } ) > db.results.ensureIndex( { 'profile.main().mu' : -1 } ) > db.results.ensureIndex( { 'profile.main().cpu' : -1 } ) > db.results.ensureIndex( { 'meta.url' : 1 } )
最后展示几张xhgui的效果图
相关学习推荐: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!