Über den Author / Internet / WordPress / Plugin / XHProf: PHP Profiler und Debugger

XHProf: PHP Profiler und Debugger

~3 Min. Lesezeit

PHP ist eine sehr beliebte und verbreitete Programmiersprache. So baut auch WordPress und sehr viele andere CMS Systeme auf dieser Sprache auf. Je grösser die Sourcecodes werden, desto schwieriger wird es bei der Fehlersuche. Sucht man dann nicht unbedingt ein Programmierfehler, sondern nur ein Flaschenhals oder Performanceproblem, ist man schnell überfordert.

In diesem Moment helfen PHP Debugger oder Profiler. XDebug ist da sicher der bekannteste, sollte dieser jedoch nur in Testumgebungen eingesetzt werden. Hat man Probleme im produktiven Umfeld und lassen sich diese damit nicht verfolgen.
Zudem müss man bei XDebug und einer Testumgebung auch immer erst die Kunden installieren zum testen, ohne einfach ein Kurztest machen zu können.

Facebook baut auch auf PHP auf, um die internen Sourcen zu optimieren, hat Facebook ein Tool mit dem Namen XHProf entwickelt und dieses als Open Source veröffentlicht. XHProf eignet sich auch für den Einsatz im, produktiven Umfeld und wird als Debugger mit Web GUI fertig ausgeliefert.

Installation Debian
Zuerst installieren wie die Sourcecodes von PHP, um das Modul dazu anzupassen:

apt-get install php5-dev make

Gegebenenfalls sollte man noch als Vorbereitung die neueste PEAR Version installieren:

pear install PEAR-1.9.4

Um das Modul zu installieren, muss man kurzzeitig in den Beta Modus wechseln:

pecl config-set preferred_state beta
pecl install xhprof
pecl config-set preferred_state stable

Nun öffnet man die /etc/php5/apache2/php.ini und fügt am Ende folgende Zeile ein:

extension=/usr/lib/php5/20090626/xhprof.so

Debugging Webseiten / WordPress manuell

Man öffnet die Datei die man später debuggen möchte und umschliesst den kompletten Sourcecode des eigenen Programms.
Am Anfang der Datei wird eine Zeile eingefügt und am Ende der Datei nochmals ein paar:

<?php
xhprof_enable(); 
/*
HIER ist dein Code
mehrere Zeichen lang
über include,
Funktionen etc.
*/
$xhprof_data = xhprof_disable();
$xhprof_root = '/usr/share/php/';
include_once $xhprof_root . "xhprof_lib/utils/xhprof_lib.php";
include_once $xhprof_root . "xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xr");
?>

Bei WordPress würde dies wie folgt aussehen:

<?php
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
xhprof_enable(); 
define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require('./wp-blog-header.php');

$xhprof_data = xhprof_disable();
$xhprof_root = '/usr/share/php/';
include_once $xhprof_root . "xhprof_lib/utils/xhprof_lib.php";
include_once $xhprof_root . "xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xr");

Anschliessend muss man die Datei nur noch aufrufen.

Debugging WordPress per Plugin
Auch gibt es die Möglichkeit das Plugin XHProf Profiler zu installieren. Dies wird dann automatisch die Codes an der richtigen Stelle aktivieren ohne das man in der Index Datei was zerstören könnte.

Ist das Plugin aktiviert, muss in der wp-config.php nur noch das Debugging aktiviert werden, in dem man dort folgende Zeile einträgt:

define("WP_DEBUG", true);

Nach dem Debuggen, sollte man das Plugin wieder deaktivieren und das Debugging in der wp-config.php Datei wieder deaktiviert/entfernt werden!

Auswertungen
Die Auswertungen werden dann auf die einzelnen funktionen und den Zeitbedarf runter gebrochen.
Für meine WordPress Seite sieht dies dann etwa so aus:

Knapp eine Sekunde Seitenaufbau und 28 MB Speicherplatz zum Aufbau.

In den Details sieht man dann die einzelnen Funktionen. Klickt man auf diese, findet man noch weitergehende Informationen.

So lässt sich sehr bequem PHP Sourcecode analysieren und verbessern.

Dank dem tool, konnte ich ein Programmierfehler finden, wo der LIMIT Befehl im SQL Statement (Fremdcode) vergessen wurde und daher der Seitenaufbau über 8 Sekunden stieg. Mit dem korrigierten Befehl, lief die Seite wieder schnell.
Auch konnte ich auf einer WordPress ein Plugin identifizieren was 80% der Ladezeit ausmachte und dieses vorübergehend deaktivieren bis ich den Fehler behoben habe.

About Stefan

avatar
Ein männlicher IT Nerd, durchstöbert das Web nach speziellen Gadgets, unentbehrlicher Software und Alles was man im IT Sektor nicht verpassen darf. Immer hilfsbereit wenn Probleme zu lösen sind oder das Unmögliche umgesetzt werden sollte.

Weitere interessante Artikel

Meine WordPress .htaccess Datei

~0 Min. LesezeitDie .htaccess Datei beinhaltet viele Serveranweisungen, welche ich gerne hier mit Euch Share …

Tabelle vertical Scrollbar machen (Responsive Table)

~0 Min. LesezeitHTML Tabellen sind ein gern eingesetztes Mittel auf Webseiten. Leider eigenen sich solche …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

eMail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.