Une interface graphique pour les données de profilage XHProf pouvant stocker les résultats dans la base de données MongoDB ou PDO.
L'application est profilée et les données de profilage sont transférées vers XHGui, qui prend ces informations, les enregistre dans MongoDB (ou base de données PDO) et fournit une interface graphique pratique pour travailler avec.
Ce projet est l'interface graphique permettant d'afficher les résultats du profilage. Pour profiler votre application, utilisez une bibliothèque minimale spécifique :
XHGui a les exigences suivantes :
Si vous devez décider quel backend utiliser, vous pouvez vérifier dans la matrice de compatibilité quelles fonctionnalités sont implémentées ou manquantes par backend.
L'installation par défaut utilise la base de données MongoDB. La plupart de la documentation parle de MongoDB.
pecl install mongodb
XHGui nécessite la version 1.3.0 ou ultérieure.L'un des pilotes et une base de données qui l'accompagne :
REMARQUE : PDO peut ne pas prendre en charge toutes les fonctionnalités de XHGui, voir #320.
Clonez ou téléchargez xhgui
depuis GitHub.
Pointez votre serveur Web vers le répertoire webroot
.
Définissez les autorisations sur le répertoire cache
pour permettre au serveur Web de créer des fichiers. Si vous êtes paresseux, 0777
fonctionnera.
La commande suivante modifie les autorisations pour le répertoire cache
:
chmod -R 0777 cache
Démarrez une instance MongoDB. XHGui utilise l'instance MongoDB pour stocker les données de profilage.
Si votre configuration MongoDB utilise l'authentification ou ne s'exécute pas sur le port et l'hôte local par défaut, mettez à jour config/config.php
de XHGui afin que XHGui puisse se connecter à votre instance mongod
.
( Facultatif , mais recommandé) Ajoutez des index à MongoDB pour améliorer les performances.
XHGui stocke les informations de profilage dans une collection results
dans la base de données xhprof
de MongoDB. L'ajout d'index améliore les performances, vous permettant de parcourir les pages plus rapidement.
Pour ajouter un index, ouvrez un shell mongo
à partir de votre invite de commande. Ensuite, utilisez la méthode db.collection.ensureIndex()
de MongoDB pour ajouter les index, comme dans ce qui suit :
$ 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 } )
> db.results.ensureIndex( { 'meta.simple_url' : 1 } )
> db.results.ensureIndex( { 'meta.SERVER.SERVER_NAME' : 1 } )
Installer les dépendances avec composer
composer install --no-dev
Configurez votre serveur Web. La section Configuration ci-dessous décrit comment configurer les règles de réécriture pour nginx et Apache.
Cette configuration utilise docker-compose pour orchestrer les conteneurs Docker.
Clonez ou téléchargez xhgui
depuis GitHub.
Démarrez les conteneurs : docker-compose up -d
Ouvrez votre navigateur sur http://xhgui.127.0.0.1.xip.io:8142 ou simplement http://localhost:8142 ou tapez dans le terminal composer open
Pour personnaliser xhgui, copiez config/config.default.php
dans config/config.php
et modifiez ce fichier.
Pour personnaliser docker-compose, copiez docker-compose.yml
dans docker-compose.override.yml
et modifiez ce fichier.
XHGui préfère que la réécriture d'URL soit activée, mais fonctionnera sans elle. Pour Apache, vous pouvez procéder comme suit pour activer la réécriture d'URL :
Assurez-vous qu'un remplacement .htaccess est autorisé et que AllowOverride a la directive FileInfo définie pour le DocumentRoot correct.
Exemple de configuration pour Apache 2.4 :
< Directory /var/www/xhgui/>
Options Indexes FollowSymLinks
AllowOverride FileInfo
Require all granted
</ Directory >
Assurez-vous de charger correctement mod_rewrite. Vous devriez voir quelque chose comme :
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
XHGui est livré avec un fichier .htaccess
pour activer les règles de réécriture restantes.
Pour nginx et fast-cgi, vous pouvez utiliser l'extrait suivant pour commencer :
server {
listen 80 ;
server_name example.com;
# root directive should be global
root /var/www/example.com/public/xhgui/webroot/;
index index.php;
location / {
try_files $uri $uri / /index.php? $args ;
}
location ~ .php$ {
try_files $uri =404 ;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ;
}
}
La méthode prise en charge pour profiler une application consiste à utiliser le package perftools/php-profiler.
Vous pouvez utiliser ce package pour collecter des données à partir de votre application Web ou d'un script CLI.
Ces données sont ensuite transférées dans la base de données XHGui où elles peuvent être visualisées avec l'application XHGui.
Le package php-profiler
propose de soumettre les données directement à l'instance XHGui une fois le profilage terminé à la fin de la requête.
Si l'application ne peut pas se connecter directement à l'instance XHGui, le package propose une solution pour capturer les données de profilage dans un fichier que vous pourrez importer ultérieurement à l'aide du script d'importation.
Attention : Importer deux fois le même fichier créera des profils en double.
L'utilisation du disque peut croître rapidement, en particulier lors du profilage d'applications avec des bases de code volumineuses ou qui utilisent des frameworks plus volumineux.
Pour contrôler la croissance, configurez MongoDB pour supprimer automatiquement les documents de profilage une fois qu'ils ont atteint un certain âge en créant un index TTL.
Décidez de l'âge maximum du document de profil en secondes : vous souhaiterez peut-être choisir une valeur inférieure en développement (où vous profilez tout) qu'en production (où vous profilez uniquement une sélection de documents). La commande suivante demande à Mongo de supprimer les documents datant de plus de 5 jours (432 000 secondes).
$ mongo
> use xhprof
> db.results.ensureIndex( { "meta.request_ts" : 1 }, { expireAfterSeconds : 432000 } )
L'objectif de l'affichage en cascade de XHGui est de reconnaître que les requêtes simultanées peuvent s'influencer mutuellement. Les requêtes simultanées de bases de données, les activités gourmandes en CPU et même les verrous sur les fichiers de session peuvent devenir pertinents. Avec une application lourde en Ajax, comprendre la création de la page est bien plus complexe qu'un simple chargement : j'espère que la cascade pourra vous aider. N'oubliez pas que si vous dressez uniquement le profil d'un échantillon de demandes, la cascade vous remplit de mensonges grossiers.
Quelques remarques :
request_ts_micro
, car la granularité de deuxième niveau ne fonctionne pas bien avec les cascades. Les métriques Prometheus adaptées à la surveillance de l'état du service sont exposées sur /metrics
. (Cela ne fonctionne actuellement que si vous utilisez PDO pour le stockage.)
Fonctionnalité | MongoDB | AOP |
---|---|---|
Exportateur de Prométhée | #305 | |
Chercheur ::dernier() | ||
Chercheur :: requête () | #384 | |
Chercheur ::get() | ||
Chercheur ::getForUrl() | #436 | |
Chercheur ::getPercentileForUrl() | #436 | |
Chercheur ::getAvgsForUrl() | #384 | |
Chercheur :: getAll (trier) | #436 | |
Chercheur :: getAll (direction) | #436 | |
Chercheur : supprimer() | ||
Chercheur ::truncate() | ||
Chercheur ::saveWatch() | #435 | |
Chercheur ::getAllWatches() | #435 | |
Chercheur :: truncateWatches () | #435 | |
Chercheur ::stats() | #305 | |
Chercheur ::getAllServerNames() | #460 |
Consultez les versions pour les journaux des modifications et les informations sur les versions.
Copyright (c) 2013 Mark Story et Paul Reinheimer
L'autorisation est accordée par la présente, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le « Logiciel »), d'utiliser le Logiciel sans restriction, y compris, sans limitation, les droits d'utilisation, de copie, de modification, de fusion. , publier, distribuer, accorder des sous-licences et/ou vendre des copies du Logiciel, et permettre aux personnes à qui le Logiciel est fourni de le faire, sous réserve des conditions suivantes :
L'avis de droit d'auteur ci-dessus et cet avis d'autorisation doivent être inclus dans toutes les copies ou parties substantielles du logiciel.
LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS MAIS SANS LIMITATION LES GARANTIES DE QUALITÉ MARCHANDE, D'ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. EN AUCUN CAS LES AUTEURS OU LES TITULAIRES DES DROITS D'AUTEUR NE SERONT RESPONSABLES DE TOUTE RÉCLAMATION, DOMMAGES OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION CONTRACTUELLE, DÉLIT OU AUTRE, DÉCOULANT DE, DE OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU D'AUTRES TRANSACTIONS DANS LE LOGICIEL.