Donnerstag, 24. Mai 2012


Artikel

Januar 2010 | Artikel

Software-Profiling in PHP Fortsetzung, Teil 3

Teil 1   Teil 2   Teil 3   

 

Vergleich der Profiler

Obwohl Xdebug wohl der meistgenutzte Profiler in der PHP-Gemeinde ist, gibt es noch eine Handvoll weitere gute Profiler. Im Folgenden wollen wir den Profiler der Firma Zend und den neuen XHProf ein wenig genauer unter die Lupe nehmen und mit Xdebug vergleichen. Fangen wir erst mal mit den Punkten an, die alle Profiler gemeinsam haben. Alle Tools, die wir vergleichen, werden als PHP-Erweiterung in das System integriert. Sie klinken sich also tief in den Interpretor ein, um notwendige Daten sammeln zu können. Die Konfiguration findet dabei über Kommandozeilenparameter oder Einstellungen in der php.ini statt. Alle drei Tools sammeln ähnliche oder identische Daten. Der größte Unterschied besteht also in der Mächtigkeit und Integration der Tools zur Auswertung der Profiler-Daten.

Zend Profiler

Der Zend Profiler wird klassisch in Kombination mit dem kostenpflichtigen Zend Studio verwendet. Die IDE baut auf das offene PDT-Projekt auf und beinhaltet somit den vollständigen Funktionsumfang, ergänzt ihn aber um wichtige Features wie eben Profiling. Die grafische Auswertung kann somit direkt über die IDE geschehen und ermöglicht einen sehr komfortablen Umgang.

XHProf

Interessanter Artikel?

PHP Mahagin 1.2010

Hat Ihnen der Artikel gefallen? Dies und mehr ist alles Teil des PHP Magazin 1.2010. Alle zwei Monate frisch am Kiosk! Zur jeweils aktuellen Ausgabe geht es hier.

XHProf ist ein relativ neues Tool, das von den Facebook-Entwicklern geschrieben und im März als Open Source veröffentlicht wurde. Genau wie alle anderen Tools deckt es die Mindestanforderung, wie Protokollierung des Speicherverbrauchs und der Funktionsdurchläufe, und bringt ein schönes zusätzliches Feature: den Diff, also den Unterschied zwischen zwei Durchläufen. Eine Analyse der vorgenommenen Optimierung kann somit auf eine sehr angehme Art und Weise unterstützt werden. XHProf bringt von Haus aus eine eigene, einfache Auswertung im HTML-Format, genannt XHProf UI mit. Das Tool zur Auswertung wurde dabei in PHP geschrieben.

Alle drei Profiler haben ihre Vor- und Nachteile. So kann der Zend Profiler als einziger mit einer Integration in die IDE aufwarten, ist aber auch die einzige kostenpflichtige Alternative. Xdebug punktet durch seine Unterstützung in der PHP-Gemeinde und die zusätzlichen Features, wie Debugging und Code Coverage, die es mit sich bringt. Zusätzlich sammelt er noch einen Bonus, da er ein Ausgabeformat produziert, das von diversen Tools zur Auswertung verarbeitet werden kann. XHProf als Neuling im Profiler-Geschäft schlägt sich wacker mit Features, die die Platzhirsche nicht ohne weiteres beherrschen.

Wer also den Komfort einer Integration in der IDE nicht missen will, dem sei der Zend Profiler in Kombination mit dem Zend Studio ans Herz gelegt. Allen anderen ist zu empfehlen, Xdebug ausgiebig zu nutzen und vielleicht ergänzend XHProf zu verwenden, um noch zusätzlich Informationen zu sammeln. Durch Vereinigung dieser beiden Tools sollte kein Speicherfresser oder Bottleneck dem Auge des Entwicklers entkommen.

Fazit

Die Idee hinter einem Profiling ist einfach. Wir nutzen existierende Tools wie Xdebug, um Laufzeitinformationen eines Skriptes oder eines URI zu sammeln. Diese Informationen werten wir aus, um langsame und nicht optimale Stellen in unserer Anwendung zu finden. Die Auswertung kann nach einfachen Mustern erfolgen. Das Suchen der Bottlenecks anhand der in der Summe kostspieligsten Methoden ist hier einer der effizientesten Wege. Bei der Auswertung dieser Zahlen sind uns die verschiedenen Grinder behilflich, indem sie die Daten grafisch aufbereiten und leserlich darstellen.

Nutzt man Profiling als qualitätssichernde Maßnahme, so sollte man einen kontinuierlichen Prozess einführen, der anhand eines Continuous-Integration-Servers den Überblick über das Laufzeitverhalten behält.

Bei der Auswahl der richtigen Tools spielt natürlich auch die Bereitschaft, Geld auszugeben, eine wichtige Rolle. Wenn man eine nahtlose Integration in die eigene Entwicklungsumgebung wünscht, so muss die Wahl auf den Zend Profiler fallen. Ist einem diese Integration nicht wichtig, dann sollte man seine Werkzeuge lieber aus der Open-Source-Gemeinde beziehen. Eine Kombination aus Xdebug und XHProf ist hierbei zu empfehlen.

Nils LangnerNils, der an der Universität Freiburg Informatik studierte, treibt sich nun mehr seit fast 10 Jahren in der Webentwicklung herum und arbeitet derzeit für eines der größten Verlagshäuser Europas im Qualitätsmanagement der Onlinesysteme. In seiner Freizeit betreibt er einen sehr erfolgreichen deutschsprachigen PHP-Blog, in dem er seine Erfahrungen zum Thema PHP kundtut. Hier werden aktuelle Geschehnisse aus der PHP-Gemeinde genauso besprochen wie Best Practices aus der Softwaretechnik. Ein Blatt wird dabei nie vor den Mund genommen.

Mike LohmannMike begann nach seiner Ausbildung zum Fachinformatiker ein Informatikstudium an der Uni Bielefeld. Seit 11 Jahren entwickelt er Webanwendungen und arbeitet derzeit für Gruner+Jahr in der Software-Architektur der Onlinesysteme.
Mike ist seit 2000 Mitglied des kompetenzverbund.werk01.

Teil 1   Teil 2   Teil 3   

Kommentare

Gravatar Benjamin Carl 10.12.2010
um 15:34 Uhr
Hallo zusammen!

Ein sehr sehr interessanter Artikel. Ich habe vor längerer Zeit schon versucht für mich selbst herauszufinden mit welchem Werkzeug ich die für mich aussagekräftigsten Ergebnisse erzielen kann. Dies erwies sich also gar nicht so einfach.

Euer Artikel (den ich übrigens im Magazin schon gelesen habe) gibt einen guten Überblick über die Vor- und Nachteile der jeweiligen Lösung.

Selbst bei der Verwendung der Auswertungswerkzeuge gibt es eintscheidene Vor- und Nachteile. Geht es um einen visuellen Überblick auf die schnelle ist kCacheGrind sehr gut geeignet. Möchte ich (insbes.) die Ausführungszeiten auf die schnelle analysieren bevorzuge ich pers. WinCacheGrind (btw: KCachegrind lässt sich übrigens auch super unter Windows mit KDE verwenden).

Neugierig gemacht habt ihr mich dann mit XHProf und der Möglichkeit des A/B-Vergleichs und der Langzeitanalyse!

Leider gab es, wie Facebook auch selber auf der Seite von XHProf verkündet, keine Windows-Version. Die letzte Version 0.9.2 läßt sich lediglich auf Linux und Mac OS kompilieren.
Ich sitze aber bevorzugt (wenn auch anscheinend als einer der letzten :) an meinem Windows (XP x64) Arbeitsplatz.

Deshalb habe ich in den letzten Tagen viel Zeit abgezwackt, meine arg eingerosteten C/C++ Skills wieder zum Leben erweckt und XHProf in Version 0.10.0 veröffentlicht. Bei der Gelegenheit habe ich
den Code leicht gesäubert, unreferenzierte Variablen entfernt und Warning-produzierende Stellen korrigiert. Durch die Einführung der Windows-Unterstützung habe ich mir erlaubt die Version von 0.9.2 auf 0.10.0 zu heben. Eine kompilierte Preview dieser Version erhaltet ihr zum download auf meiner Seite unter http://www.benjamin-carl.de

Den Quelltext veröffentliche ich (sofern nichts dazwischen kommt) noch im Laufe des Tages unter https://github.com/clickalicious/xhprof

Euer Benjamin Carl
#zitieren