Derick Rethans – Performance Optimierung von PHP Anwendungen
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
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:
https://blog.silversolutions.de/2011/06/b2b-technologie/derick-rethans-performance-optimierung-von-php-anwendungen/https://blog.silversolutions.de/wp-content/uploads/2011/06/Dirk-Rethans.jpghttps://blog.silversolutions.de/wp-content/uploads/2011/06/Dirk-Rethans-150x150.jpgB2B.eventsB2B.technologieEvents,PerformanceEs 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...Frank DegeFrank Degefd@silversolutions.deAdministratorFrank Dege ist seit mittlerweile fast 30 Jahren online (irgendwann hieß das ja mal BTX) und beschäftigt sich schon fast genauso lange mit dem Thema elektronischer Handel. Bereits im Rahmen seiner Diplomarbeit an der TU Berlin hat er mit einem kleinen Team einen eigenen Online-Shop entwickelt und automatische Test-Verfahren für Online-Anwendungen entworfen. Für silver.solutions verantwortet Frank Dege federführend die Architektur und Produktstrategie der Onlineshop-Software silver.eShop. Wenn Frank nicht programmiert, dann tischlert er.silver.solutions