So richten Sie XHProf und XHGui für das Profiling von PHP-Anwendungen unter Ubuntu 14.04 ein

Einführung

In der Softwareentwicklung ist die Profilerstellung eine Technik, mit der Anwendungen zur Laufzeit analysiert werden, um mögliche Engpässe und Leistungsprobleme innerhalb einer Anwendung zu identifizieren. Es ist eine wesentliche Ressource für die Softwareoptimierung. Das Profiling unterscheidet sich vom Benchmarking dadurch, dass es die Anwendung auf Codeebene analysiert, während das Benchmarking die vom Endbenutzer erlebte Gesamtleistung der Anwendung analysieren soll.

Ein * Profiler * ist eine Software, die detaillierte Informationen über die Anwendung sammelt, um Statistiken und aufschlussreiche Daten über die Speichernutzung, Häufigkeit und Dauer von Funktionsaufrufen, die Zeit zum Beantworten einer Anfrage usw. zu generieren.

XHProf ist ein Profiler zur Analyse von PHP-Anwendungen. XHProf wurde von Facebook erstellt und von Facebook als Open-Source-Lösung bereitgestellt. Dies bedeutet, dass es im Hintergrund ausgeführt wird und die Leistung der Anwendung so wenig wie möglich beeinträchtigt.

XHGui bietet eine umfangreiche Oberfläche zur Visualisierung der über XHProf gesammelten Daten.

In diesem Tutorial erfahren Sie, wie Sie XHProf und XHGui installieren, um ein Profil für eine PHP-Anwendung zu erstellen, die unter Ubuntu 14.04 ausgeführt wird.

Voraussetzungen

Um dieser Anleitung zu folgen, benötigen Sie:

  • Ein Ubuntu 14.04-Server mit einem Benutzer ohne Root-Berechtigung, den Sie unter Initial Server einrichten können Setup

  • Eine funktionierende PHP-Webserver-Umgebung, in der eine PHP-Anwendung ausgeführt wird, die analysiert wird

Wenn Sie bereit sind, fortzufahren, melden Sie sich mit Ihrem sudo-Konto bei Ihrem Server an.

Schritt 1 - Installieren Sie die Server-Abhängigkeiten

Falls auf Ihrem Server kein "+ pecl " installiert ist, sollten Sie es jetzt installieren lassen. Wir brauchen es, um sowohl ` xhprof ` als auch die PHP-Erweiterung ` mongo +` einzurichten.

Aktualisieren Sie zuerst den Paketmanager-Cache mit:

sudo apt-get update

Als nächstes installieren wir "+ pecl " mit dem Paket " php-pear ". Wir benötigen außerdem " php5-dev ", um PHP-Module über " pecl " zu installieren, und " php5-mcrypt +", um XHGui einzurichten:

sudo apt-get install php-pear php5-dev php5-mcrypt

Führen Sie Folgendes aus, um die Erweiterung "+ mcrypt +" zu aktivieren:

sudo php5enmod mcrypt

Zuletzt benötigen wir Git, um XHGui zu installieren. Wenn Git noch nicht auf Ihrem Server installiert ist, können Sie es jetzt installieren mit:

sudo apt-get install git

Schritt 2 - Installieren Sie XHProf

Jetzt sollten wir XHProf installieren und aktivieren. Um es über + pecl + zu installieren, führen Sie Folgendes aus:

sudo pecl install xhprof-beta

Als nächstes müssen wir die Erweiterung + xhprof + aktivieren. Um diesen Prozess zu vereinfachen und gleichzeitig die Ubuntu / Debian-Standards beizubehalten, werden wir eine separate + ini + - Konfigurationsdatei erstellen und diese mit dem Befehl + php5enmod + aktivieren.

Erstellen Sie eine neue + ini Konfigurationsdatei in` + / etc / php5 / mods-available`:

sudo nano /etc/php5/mods-available/xhprof.ini

Fügen Sie die folgenden Inhalte in diese Datei ein:

/etc/php5/mods-available/xhprof.ini

extension=xhprof.so

Führen Sie zum Aktivieren der Modulkonfigurationsdatei Folgendes aus:

sudo php5enmod xhprof

Jetzt müssen Sie nur noch den Webserver neu starten, um die Änderungen zu übernehmen. In * LAMP * -Umgebungen (Apache) können Sie dies tun mit:

sudo service apache2 restart

In * LEMP * -Umgebungen (Nginx + PHP5-FPM) sollten Sie den Dienst + php5-fpm + neu starten mit:

sudo service php5-fpm restart

Die Erweiterung "+ xhprof +" sollte nun installiert und aktiviert sein. Zur Bestätigung können Sie Folgendes ausführen:

php --ri xhprof

Die Ausgabe sollte ungefähr so ​​aussehen:

Outputxhprof

xhprof => 0.9.2
CPU num => 1

Schritt 3 - Installieren Sie MongoDB

Der nächste Schritt besteht darin, MongoDB und die PHP-Erweiterung "+ mongo +" auf dem Server zu installieren. MongoDB wird von XHGui verwendet, um die über die XHProf-Anwendungsanalyse erhaltenen Daten zu speichern.

Um MongoDB zu installieren, führen Sie Folgendes aus:

sudo apt-get install mongodb

Führen Sie zum Installieren der MongoDB-PHP-Erweiterung Folgendes aus:

sudo pecl install mongo

Bei der Installation werden Sie zu einem bestimmten Zeitpunkt nach Ihrer Eingabe gefragt, ob Sie die Unternehmensauthentifizierung für MongoDB aktivieren möchten. Sie können den Standardwert (Nein) beibehalten und einfach die Eingabetaste drücken, um mit der Installation fortzufahren.

Jetzt müssen wir die PHP-Erweiterung + mongo + aktivieren, und zwar auf die gleiche Weise, wie wir es für die Erweiterung + xhprof + getan haben. Erstellen Sie eine neue Konfigurationsdatei unter + / etc / php5 / mods-available / mongo.ini +:

sudo nano /etc/php5/mods-available/mongo.ini

Fügen Sie den folgenden Inhalt in die Datei ein:

/etc/php5/mods-available/mongo.ini

extension=mongo.so

Führen Sie zum Aktivieren der Modulkonfigurationsdatei Folgendes aus:

sudo php5enmod mongo

Starten Sie nun den Webserver neu, um die Änderungen zu übernehmen. In * LAMP * -Umgebungen (Apache) können Sie dies tun mit:

sudo service apache2 restart

In * LEMP * -Umgebungen (Nginx + PHP5-FPM) sollten Sie den Dienst + php5-fpm + neu starten mit:

sudo service php5-fpm restart

Die + mongo + Erweiterung sollte nun installiert und aktiviert sein. Zur Bestätigung können Sie Folgendes ausführen:

php --ri mongo

Die Ausgabe sollte ungefähr so ​​aussehen:

Outputmongo

MongoDB Support => enabled
Version => 1.6.12
Streams Support => enabled
SSL Support => enabled
                  Supported Authentication Mechanisms
MONGODB-CR => enabled
SCRAM-SHA-1 => enabled
MONGODB-X509 => enabled
GSSAPI (Kerberos) => disabled
PLAIN => disabled
...

Schritt 4 - MongoDB-Indizes einrichten (optional)

Dies ist ein optionaler, aber empfohlener Schritt, der die Gesamtleistung von XHGui beim Speichern und Zugreifen auf Daten aus MongoDB verbessert.

Greifen Sie auf den MongoDB-Client über die Befehlszeile zu:

mongo

Führen Sie nun die folgende Befehlsfolge aus, um die Indizes für XHGui zu erstellen:

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 } )

Führen Sie Folgendes aus, um den MongoDB-Client zu beenden:

exit

Schritt 5 - Installieren Sie XHGui

Im nächsten Schritt installieren Sie XHGui und richten es als virtuellen Host auf Ihrem Webserver ein.

Zunächst klonen wir das XHGui-Repository von Github. Da wir den Inhalt von XHGui als virtuellen Host auf dem Webserver bereitstellen müssen, platzieren wir das geklonte Repository in "+ / var / www +".

Es wird empfohlen, dass Sie das XHGui-Verzeichnis so einrichten, dass es Ihrem regulären Benutzer gehört. In diesem Beispiel verwenden wir "+ sammy +" als Benutzernamen und Gruppe, aber Sie sollten diese Werte durch Ihren eigenen Benutzernamen und Ihre eigene Gruppe ersetzen.

sudo mkdir -p /var/www/xhgui
sudo chown -R . /var/www/xhgui
cd /var/www
git clone https://github.com/perftools/xhgui.git xhgui

Führen Sie das mitgelieferte Installationsprogramm aus, um die Abhängigkeiten von XHGui zu installieren:

cd xhgui
php install.php

Nachdem die Abhängigkeiten erfolgreich installiert wurden, müssen wir einen virtuellen Host konfigurieren, der den Inhalt von "+ xhgui " bereitstellt. In den nächsten Abschnitten wird beschrieben, wie Sie einen virtuellen Host für " xhgui +" in LAMP- und LEMP-Umgebungen erstellen.

Einrichten des virtuellen Hosts von XHGui auf LAMP

Wenn wir Apache als Webserver verwenden, müssen wir zuerst sicherstellen, dass + mod_rewrite + aktiviert ist. Führen Sie zum Aktivieren Folgendes aus:

sudo a2enmod rewrite

Erstellen Sie eine neue virtuelle Host-Datei unter "+ / etc / apache2 / sites-available":

sudo nano /etc/apache2/sites-available/xhgui.conf

Platzieren Sie den folgenden Inhalt in dieser Datei:

/etc/apache2/sites-available/xhgui.conf

<VirtualHost *:80>
   DocumentRoot /var/www/xhgui/webroot
   ServerName

   <Directory "/var/www/xhgui/webroot">
       Options Indexes MultiViews FollowSymLinks
       AllowOverride All
       Require all granted
   </Directory>
</VirtualHost>

Beachten Sie, dass der Dokumentenstamm auf das Unterverzeichnis "+ webroot +" im Hauptverzeichnis von XHGui verweisen sollte.

Aktivieren Sie den virtuellen Host mit:

sudo a2ensite xhgui

Um die Änderungen zu übernehmen, laden Sie Apache neu mit:

sudo service apache2 reload

Einrichten des virtuellen Hosts von XHGui auf LEMP

Beginnen Sie mit der Erstellung einer neuen virtuellen Host-Datei unter + / etc / nginx / sites-available +:

sudo nano /etc/nginx/sites-available/xhgui

Platzieren Sie den folgenden Inhalt in dieser Datei:

/ etc / nginx / sites-available / xhgui

server {
   listen   80;
   server_name ;
   root   /var/www/xhgui/webroot/;
   index  index.php;

   location / {
       try_files $uri $uri/ /index.php?$uri&$args;
   }

   location ~ \.php$ {
               try_files $uri =404;
               fastcgi_split_path_info ^(.+\.php)(/.+)$;
               fastcgi_pass unix:/var/run/php5-fpm.sock;
               fastcgi_index index.php;
               include fastcgi_params;
   }
}

Beachten Sie, dass der Dokumentenstamm auf das Unterverzeichnis "+ webroot +" im Hauptverzeichnis von XHGui verweisen sollte.

Führen Sie zum Aktivieren des neuen virtuellen Hosts Folgendes aus:

sudo ln -s /etc/nginx/sites-available/xhgui /etc/nginx/sites-enabled/xhgui

Starten Sie nun Nginx neu, um die Änderungen zu übernehmen:

sudo service nginx restart

Schritt 6 - Richten Sie XHProf ein

Zu diesem Zeitpunkt sollten Sie in der Lage sein, über Ihren Browser auf die XHGui-Oberfläche zuzugreifen, indem Sie den Servernamen aufrufen, den Sie in Ihrer Webserverkonfiguration angegeben haben. Da wir noch keine Profildaten erfasst haben, sollte eine Seite wie die folgende angezeigt werden:

image: http: //assets.digitalocean.com/articles/xhprof-ubuntu/01-empty.png [Image 01: XHGui First Run]

Die XHProf-Erweiterung ist bereits auf dem Server installiert, der Profilerstellungsprozess für Ihre Anwendung muss jedoch noch aktiviert werden. Dies geschieht normalerweise durch Einfügen einer PHP-Direktive in Ihren Webserver, die automatisch allen ausgeführten PHP-Skripten einen Code voranstellt. Es ist wichtig darauf hinzuweisen, dass XHProf standardmäßig nur 1 von 100 Anforderungen an die Anwendung profiliert.

XHGui bietet einen Standard-PHP-Header, den Sie Ihren Skripten voranstellen können, um die Profilerstellung für Ihre Anwendung zu initialisieren. Wenn Sie alle Schritte in diesem Tutorial ausgeführt haben, sollte sich die Header-Datei unter + / var / www / xhgui / external / header.php + befinden.

In den nächsten Abschnitten erfahren Sie, wie Sie diese Header-Datei automatisch allen Ihren PHP-Skripten in Apache- und Nginx-Umgebungen voranstellen. In diesem Beispiel aktivieren wir die Profilerstellung für eine WordPress-Anwendung, die als Hauptwebsite auf diesem Server gehostet wird.

Aktivieren der Profilerstellung unter Apache

Bearbeiten Sie die Apache-Konfigurationsdatei für die Website, deren Profil wir erstellen möchten. In diesem Beispiel aktivieren wir die Profilerstellung für die Haupt-Apache-Website, die auf diesem Server gehostet wird und unter "+ /etc/apache2/sites- available/000-default.conf +" definiert ist. Öffnen Sie diese Datei mit dem Befehlszeileneditor Ihrer Wahl:

sudo nano /etc/apache2/sites-available/000-default.conf

Fügen Sie die hervorgehobene Zeile in den vorhandenen + <VirtualHost> + Block ein:

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
 ...

 ...
</VirtualHost>

Speichern Sie die Datei und beenden Sie sie. Starten Sie Apache neu, um die Änderungen zu übernehmen:

sudo service apache2 restart

Aktivieren der Profilerstellung unter Nginx

Bearbeiten Sie die Nginx-Konfigurationsdatei für die Website, deren Profil wir erstellen möchten. In diesem Beispiel aktivieren wir die Profilerstellung für die auf diesem Server gehostete "+ default " - Website, die unter " / etc / nginx / sites-available / default +" definiert ist. Öffnen Sie diese Datei mit dem Befehlszeileneditor Ihrer Wahl:

sudo nano /etc/nginx/sites-available/default

Suchen Sie nun nach dem Block, der definiert, wie mit + .php + Skripten umgegangen wird. Fügen Sie die hervorgehobene Zeile in diesen Block ein:

/ etc / nginx / sites-available / default

location ~ \.php$ {
  ...

  ...
}

Speichern Sie die Datei und beenden Sie sie. Starten Sie Nginx neu, um die Änderungen zu übernehmen:

sudo service nginx restart

Schritt 7 - Erste Schritte mit XHGui

Alles ist nun ordnungsgemäß eingerichtet. Abhängig von der Anzahl der Aufrufe, die Ihre Website normalerweise erhält, kann es einige Zeit dauern, bis die ersten Profildaten in XHGui angezeigt werden. Dies liegt an der Tatsache, dass XHProf standardmäßig nur 1 von 100 empfangenen Anfragen profiliert. Möglicherweise müssen Sie durch Ihre Website navigieren und sie einige Male neu laden, bevor Profildaten verfügbar sind.

XHGui Übersicht

Wenn Profilinformationen verfügbar sind, sollte eine Seite wie die folgende angezeigt werden:

image: http: //assets.digitalocean.com/articles/xhprof-ubuntu/02-overview.png [Image 02: XHGui Overview]

Im Folgenden finden Sie eine kurze Beschreibung der einzelnen Felder in dieser Übersichtstabelle:

  • * Methode: * Die in der analysierten Anfrage verwendete Methode

  • * URL: * Die URL, für die ein Profil erstellt wurde

  • * Uhrzeit: * Die Uhrzeit, zu der diese Profildaten erfasst wurden

  • * wt (Wall Time): * Wie lange es gedauert hat, diese Anfrage zu bearbeiten

  • * cpu: * Die Zeit, die die CPU benötigt, um diese Anforderung auszuführen

  • * mu (Memory Usage): * Durchschnittlicher Speicherbedarf während dieser Anfrage

  • * pmu (Peak Memory Usage): * Spitzenwert der Speicherauslastung während dieser Anforderung

Verwenden Sie den Link im Feld time, um die Details eines Profilierungslaufs anzuzeigen. Sie sollten eine Seite wie diese sehen:

image: http: //assets.digitalocean.com/articles/xhprof-ubuntu/03-profile.png [Image 03: Profiling Data]

Auf der linken Seite sehen Sie Informationen zu der analysierten Anfrage, z. B. die verwendete Methode, den Skriptnamen und die URL, Anforderungsparameter usw. Auf der Hauptseite können Sie die Funktionen oder Methoden identifizieren, deren Ausführung die meiste Zeit in Anspruch nahm, sowie die Funktionen oder Methoden, die den höheren Speicherverbrauch aufwiesen. Alle diese Informationen beziehen sich auf einen bestimmten Profilierungslauf und eine bestimmte Anforderung.

Funktionsaufrufe prüfen

Wenn Sie zum Ende der Seite scrollen, haben Sie Zugriff auf eine Tabelle mit detaillierten Informationen zu allen Funktionsaufrufen, die während dieser Anforderung ausgeführt wurden, einschließlich wie oft die Funktion oder Methode ausgeführt wurde, wie lange die Ausführung gedauert hat und wie viel Gedächtnis es verwendet, und viele andere interessante Details. Sie können den Tabellenkopf verwenden, um die Auflistung nach einem dieser Parameter zu ordnen. Sie können auch das Suchfeld rechts verwenden, um nach einem bestimmten Funktions- oder Methodennamen zu suchen.

image: http: //assets.digitalocean.com/articles/xhprof-ubuntu/04-functioncalls.png [Image 04: XHGui Function Calls]

Runs vergleichen

Eine der nützlichsten Funktionen von XHGui ist das Vergleichstool, mit dem Sie zwei verschiedene Profilierungsläufe vergleichen können. Auf diese Weise können Sie Änderungen an Ihrem Code vornehmen und mehrere Durchläufe vergleichen, um festzustellen, ob Ihre Änderungen zu Leistungsverbesserungen für die Anwendung geführt haben.

Wenn Sie sich eine Reihe von Profildaten ansehen, sehen Sie rechts neben dem Abschnitt Watch Functions eine Schaltfläche mit der Bezeichnung * Compare This Run *. Wenn Sie auf diese Schaltfläche klicken, wird eine Liste aller für diese bestimmte URL ausgeführten Profilierungsläufe angezeigt, in der Sie eines der Elemente in der Liste auswählen können, um eine Vergleichsansicht zu erstellen. Wählen Sie einfach den Lauf, mit dem Sie vergleichen möchten, und klicken Sie auf die Schaltfläche "Vergleichen".

So sieht die Vergleichsansicht aus:

image: http: //assets.digitalocean.com/articles/xhprof-ubuntu/05-compare.png [Image 05: XHGui-Vergleich von Läufen]

Fazit

Die Profilerstellung ist eine wichtige Technik zur Softwareoptimierung, mit der Sie detaillierte Einblicke in Ihre Anwendung auf Codeebene erhalten. Mithilfe von Tools wie XHProf und XHGui können Sie problematische Teile Ihres Codes effektiv identifizieren und die Auswirkungen von Codeänderungen auf die Leistung der Anwendung überwachen.

Weitere Informationen zu den für XHGui verfügbaren Konfigurationsoptionen finden Sie im offiziellen Github-Repository.