Eine grafische Oberfläche für XHProf-Profilierungsdaten, die die Ergebnisse in MongoDB oder PDO-Datenbank speichern kann.
Die Anwendung wird profiliert und die Profilierungsdaten werden an XHGui übertragen, das diese Informationen aufnimmt, sie in MongoDB (oder PDO-Datenbank) speichert und eine praktische GUI für die Arbeit damit bereitstellt.
Dieses Projekt ist die GUI zum Anzeigen von Profilerstellungsergebnissen. Um ein Profil Ihrer Anwendung zu erstellen, verwenden Sie eine bestimmte Minimalbibliothek:
Für XHGui gelten folgende Anforderungen:
Wenn Sie entscheiden müssen, welches Backend Sie verwenden möchten, können Sie in der Kompatibilitätsmatrix überprüfen, welche Funktionen pro Backend implementiert sind oder fehlen.
Die Standardinstallation verwendet die MongoDB-Datenbank. Der Großteil der Dokumentation spricht von MongoDB.
pecl install mongodb
XHGui erfordert Version 1.3.0 oder höher.Alle Treiber und eine zugehörige Datenbank:
HINWEIS: PDO unterstützt möglicherweise nicht alle Funktionen von XHGui, siehe #320.
Klonen Sie xhgui
oder laden Sie es von GitHub herunter.
Richten Sie Ihren Webserver auf das webroot
Verzeichnis.
Legen Sie die Berechtigungen für das cache
-Verzeichnis fest, damit der Webserver Dateien erstellen kann. Wenn Sie faul sind, funktioniert 0777
.
Der folgende Befehl ändert die Berechtigungen für das cache
Verzeichnis:
chmod -R 0777 cache
Starten Sie eine MongoDB-Instanz. XHGui verwendet die MongoDB-Instanz zum Speichern von Profilierungsdaten.
Wenn Ihr MongoDB-Setup Authentifizierung verwendet oder nicht auf dem Standardport und Localhost ausgeführt wird, aktualisieren Sie config/config.php
von XHGui, damit XHGui eine Verbindung zu Ihrer mongod
Instanz herstellen kann.
( Optional , aber empfohlen) Fügen Sie Indizes zu MongoDB hinzu, um die Leistung zu verbessern.
XHGui speichert Profilierungsinformationen in einer results
in der xhprof
Datenbank in MongoDB. Durch das Hinzufügen von Indizes wird die Leistung verbessert, sodass Sie schneller durch Seiten navigieren können.
Um einen Index hinzuzufügen, öffnen Sie eine mongo
Shell über Ihre Eingabeaufforderung. Verwenden Sie dann db.collection.ensureIndex()
-Methode von MongoDB, um die Indizes hinzuzufügen, wie im Folgenden:
$ 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 } )
Installieren Sie Abhängigkeiten mit Composer
composer install --no-dev
Richten Sie Ihren Webserver ein. Im folgenden Abschnitt „Konfiguration“ wird beschrieben, wie Sie die Rewrite-Regeln für Nginx und Apache einrichten.
Dieses Setup verwendet Docker-Compose, um Docker-Container zu orchestrieren.
Klonen Sie xhgui
oder laden Sie es von GitHub herunter.
Starten Sie die Container: docker-compose up -d
Öffnen Sie Ihren Browser unter http://xhgui.127.0.0.1.xip.io:8142 oder einfach http://localhost:8142 oder geben Sie „Terminal composer open
ein
Um xhgui anzupassen, kopieren Sie config/config.default.php
nach config/config.php
und bearbeiten Sie diese Datei.
Um Docker-Compose anzupassen, kopieren Sie docker-compose.yml
nach docker-compose.override.yml
und bearbeiten Sie diese Datei.
XHGui bevorzugt die Aktivierung der URL-Umschreibung, funktioniert aber auch ohne. Für Apache können Sie Folgendes tun, um das Umschreiben von URLs zu aktivieren:
Stellen Sie sicher, dass eine .htaccess-Überschreibung zulässig ist und dass bei AllowOverride die Anweisung FileInfo für den richtigen DocumentRoot festgelegt ist.
Beispielkonfiguration für Apache 2.4:
< Directory /var/www/xhgui/>
Options Indexes FollowSymLinks
AllowOverride FileInfo
Require all granted
</ Directory >
Stellen Sie sicher, dass Sie mod_rewrite korrekt laden. Sie sollten etwa Folgendes sehen:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
XHGui wird mit einer .htaccess
Datei geliefert, um die verbleibenden Umschreiberegeln zu aktivieren.
Für Nginx und Fast-CGI können Sie als Einstieg das folgende Snippet verwenden:
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 ;
}
}
Die unterstützte Methode zum Profilieren einer Anwendung ist die Verwendung des Pakets perftools/php-profiler.
Mit diesem Paket können Sie Daten aus Ihrer Webanwendung oder einem CLI-Skript sammeln.
Diese Daten werden dann in die XHGui-Datenbank übertragen, wo sie mit der XHGui-Anwendung angezeigt werden können.
Das php-profiler
-Paket ermöglicht die direkte Übermittlung von Daten an die XHGui-Instanz, sobald die Profilerstellung am Ende der Anfrage abgeschlossen ist.
Wenn die Anwendung keine direkte Verbindung zur XHGui-Instanz herstellen kann, bietet das Paket eine Lösung zum Erfassen von Profilierungsdaten in einer Datei, die Sie später mithilfe des Importskripts importieren können.
Warnung : Wenn Sie dieselbe Datei zweimal importieren, werden doppelte Profile erstellt.
Die Festplattennutzung kann schnell ansteigen, insbesondere bei der Profilerstellung für Anwendungen mit großen Codebasen oder die größere Frameworks verwenden.
Um das Wachstum in Schach zu halten, konfigurieren Sie MongoDB so, dass Profiling-Dokumente automatisch gelöscht werden, sobald sie ein bestimmtes Alter erreicht haben, indem Sie einen TTL-Index erstellen.
Legen Sie in Sekundenschnelle ein maximales Profildokumentalter fest: Möglicherweise möchten Sie einen niedrigeren Wert in der Entwicklung (wo Sie alles profilieren) wählen als in der Produktion (wo Sie nur eine Auswahl von Dokumenten profilieren). Der folgende Befehl weist Mongo an, Dokumente zu löschen, die älter als 5 Tage (432.000 Sekunden) sind.
$ mongo
> use xhprof
> db.results.ensureIndex( { "meta.request_ts" : 1 }, { expireAfterSeconds : 432000 } )
Das Ziel der Wasserfallanzeige von XHGui besteht darin, zu erkennen, dass gleichzeitige Anforderungen sich gegenseitig beeinflussen können. Gleichzeitige Datenbankanfragen, CPU-intensive Aktivitäten und sogar Sperren von Sitzungsdateien können relevant werden. Bei einer Ajax-lastigen Anwendung ist das Verständnis des Seitenaufbaus weitaus komplexer als ein einzelner Ladevorgang: Hoffentlich kann der Wasserfall helfen. Denken Sie daran: Wenn Sie nur eine Auswahl von Anfragen profilieren, werden Sie im Wasserfall mit unhöflichen Lügen gefüllt.
Einige Anmerkungen:
request_ts_micro
-Werts ein, da die Granularität der zweiten Ebene bei Wasserfällen nicht gut funktioniert. Prometheus-Metriken, die zur Überwachung des Dienstzustands geeignet sind, werden auf /metrics
bereitgestellt. (Dies funktioniert derzeit nur, wenn PDO zur Speicherung verwendet wird.)
Besonderheit | MongoDB | gU |
---|---|---|
Prometheus-Exporteur | #305 | |
Sucher::latest() | ||
Sucher::query() | #384 | |
Sucher::get() | ||
Searcher::getForUrl() | #436 | |
Searcher::getPercentileForUrl() | #436 | |
Searcher::getAvgsForUrl() | #384 | |
Searcher::getAll(sort) | #436 | |
Searcher::getAll(direction) | #436 | |
Sucher::delete() | ||
Sucher::truncate() | ||
Searcher::saveWatch() | #435 | |
Searcher::getAllWatches() | #435 | |
Searcher::truncateWatches() | #435 | |
Sucher::stats() | #305 | |
Searcher::getAllServerNames() | #460 |
Änderungsprotokolle und Versionsinformationen finden Sie in den Veröffentlichungen.
Copyright (c) 2013 Mark Story & Paul Reinheimer
Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die „Software“) erhält, kostenlos die Erlaubnis erteilt, mit der Software ohne Einschränkung zu handeln, einschließlich und ohne Einschränkung der Rechte zur Nutzung, zum Kopieren, Ändern und Zusammenführen , Kopien der Software zu veröffentlichen, zu verteilen, unterzulizenzieren und/oder zu verkaufen und Personen, denen die Software zur Verfügung gestellt wird, dies zu gestatten, vorbehaltlich der folgenden Bedingungen:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD „WIE BESEHEN“ ZUR VERFÜGUNG GESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG. IN KEINEM FALL SIND DIE AUTOREN ODER URHEBERRECHTSINHABER HAFTBAR FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN ODER ANDERE HAFTUNG, WEDER AUS EINER VERTRAGLICHEN HANDLUNG, AUS HANDLUNG ODER ANDERWEITIG, DIE SICH AUS, AUS ODER IN ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDELN IN DER SOFTWARE ERGEBEN SOFTWARE.