Derick Rethans – Performance Optimierung von PHP Anwendungen

Dirk Rethans

Derick Rethans

Es gibt viele unsinnige Tipps im Internet zu diesem Thema:

Funktionsaufrufe kosten Zeit
Nicht immer ist OOP notwendig, es kostet Zeit.
++$i nutzen statt $i++

Diese Tipps bringen allerdings nur wenig ohne das Wissen, welche Stellen im Programm eigentlich langsam sind.

 

Die Hauptfrage, die zu beantworten ist lautet daher

Was ist genau ist langsam? Welche Funktion muss ich optimieren oder liegt es gar am Konzept?

Derick Rethans hat einige Werkzeuge vorgestellt, die Antworten auf diese Fragen geben.

Wie messe ich die Performance?
Einige bekannte Tools können die Geschwindigkeit von Anwendungen über das Internet messen:

– siege
– ab

Beide Tools messen die Geschwindigkeit bestimmter URLs unter Last.

[notice]Tipp: Möglichst unterschiedliche URLs testen, um vergleichbare Ergebnise zu bekommen. Beide Tools können Textdateien mit URLs einlesen, die geprüft werden können.[/notice]

Die zweite Frage, die sich anschliesst ist

Wie geht es meinem Server, wenn diesen beiden Tools meine Website testen?

Das Programm vmstat zeigt interessante Werte an, die zeigen, wie CPU oder Hauptspeicher belastet werden:

vmstat -n 1

vmstat -n 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
1  0 1036520 143584 205752 601596    1    0     0     2    2    0  8  4 86  2
1  0 1036520 143584 205752 601596    0    0     0     0   36 1324 25  1 75  0
1  0 1036520 143584 205792 601604    0    0    48     0  367 1686 25  0 72  2
1  0 1036520 143584 205812 601604    0    0    20     0  534 1804 25  1 73  1

Folgende Spalten sind hierbei interessant:

r     - Anzahl der Prozesse, die auf die CPU warten
free  - free memory
cache - file data
so    - Summe des auf die Festeplatte ausgelagerten RAMs. Wenn dieser Wert > 0 
        ist, dann hat man ein Problem
us     - verbrauchte CPU Zeit durch User Prozesse
sys    - verbrauchte CPU zeit durch den Kernel
id     - ungenutze CPU Zeit
wa     - Zeitverbrauch durch wartende Prozesse

Wenn der Wert für „us“ hoch ist, ist eine Optmierung der Anwendung notwendig.

Die dritte Frage, die sich dann stellt ist

Welche Stelle in meiner Anwendung ist dafür verantwortlich? Wenn der Verursacher bekannt ist, dann ergeben sich oftmals Wege, das Problem zu lösen.

Derick hat verschiedene Wege vorgestellt:

  • in der Anwendung timing points ausgeben (z.B. wie bei eZ Publish). Die Zeta Components bieten fertige Methoden an
  • included – (pecl install included). Es ist einfach zu installieren. Es muss in der php.ini geladen werden. Es erzeugt einen Graphen, der die Includes grafisch anzeigt. Für Anwendungen, die einen autoloader verwenden, wie z.B. eZ ist diese Prüfung aber nicht notwendig
  • xdebug – ich muss glaube nicht erwähnen, dass Derick xdebug empfiehlt

xdebug

PHP Code

PHP Code

Ist ca. 8 Jahre alt und wurde von Derick Rethans entwickelt. xdebug wird in PHP eingebunden und überwacht alle Aufrufe in einer Anwendung. Als Resultat wird ein langes xdebug Logfile erzeugt. Welches alles relevanten Infos enthält. Allerdings werden diese logfiles bei kompexen Anwendungen sehr gross!

 

Was enthält diese Datei an Informationen?

Alle Funktionsaufrufe mit Zeiten und Speicherverbrauch bei Aufruf und Verlassen der Funktion

Zugegebenerweise ist dieses Logfile nicht sehr schön zu lesen. Daher gibt es diverse Tools, die dieses Datei aufbereiten:

Es gibt ein vim rc File, welches xdebug Ausgaben formatiert darstellt.
Es gibt eine Analyse Script, welches das Logfile auswertet. Es zeigt die Top 25 Funktionen an, die die meiste Zeit benötigt haben. Für jede Funktion wird der Speicherverbrauch und die Anzahl der Calls angezeigt.

Für xdebug gibt es ferner valaxdebugtools um die Logfiles auszuwerten.

Weitere Links:

Frank Dege

Ich bin seit mittlerweile fast 30 Jahren online (irgendwann hieß das ja mal BTX) und beschäftige mich schon fast genauso lange mit dem Thema elektronischer Handel. Schon im Rahmen meiner Diplomarbeit an der TU Berlin haben wir im Team einen Online-Shop entwickelt und automatische Test-Verfahren für Online-Anwendungen entworfen. Nach der Gründung der eigenen Firma im Jahr 2000 ging der Fokus noch stärker auf das Thema Onlineshops, hier bereits früh im Zusammenspiel mit einem ERP-System. Für silver.solutions verantworte ich federführend die Architektur und Produktstrategie unserer eigenen Onlineshop-Software silver.e-shop. Wir nutzen seit 2003 eZ Publish als Plattform für unseren Shop und ich bin immer noch absolut überzeugt davon, dass es das leistungsfähigste CMS überhaupt ist. Das sagen andere über Frank: Trendforscher /// immer neugierig auf neue Entwicklungen /// wenn er nicht programmiert, dann tischlert er.

Schreibe einen Kommentar

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

Sicherheitsfrage * Time limit is exhausted. Please reload CAPTCHA.