Performance Monitoring

Apache, Lighttpd, nginx, Cherokee
simcen
Posts: 333
Joined: 2003-02-12 14:35
Location: Bern, Schweiz

Performance Monitoring

Post by simcen » 2008-07-21 11:38

Hoi Zusammen

Ich brauche wieder mal Rat :)
Mein Apache braucht zu Spitzenzeiten übermässig viel CPU, mit grösster Wahrscheinlichkeit kommt die Auslastung von schlechten PHP-Scripts. Da ich aber mit den Apache-Logs und der Prozess-Auswertung nicht auf die schliche komme, welches Script die Auslastung auslöst, brauche ich eine andere Variante.
Daher:
- Wie messe ich am besten einen hohen CPU-Verbrauch in einem PHP-Script? Kann man einfach annehmen, je länger die Script-Laufzeit desto höher der CPU Verbrauch (Queueing)?
- Gibt es externe Tools (z.B. via Apache Modul) um eine tiefere Perfomance Analyse zu machen?

Dann weiter:
- Welche Code-Konstrukte in PHP sind die klassischen Ressourcenfresser? (Ich weiss, sehr allgemeine Frage)


So, wie es meistens bei meinen Posts ist, brauche ich nur eine kleine Denkanregung ;)
Danke schon mal im Vorraus und Gruss
Simon

PS:
System ist ein Apache2 v2.2.3 auf Debian Etch 32bit.

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: Performance Monitoring

Post by daemotron » 2008-07-21 13:18

simcen wrote:- Wie messe ich am besten einen hohen CPU-Verbrauch in einem PHP-Script? Kann man einfach annehmen, je länger die Script-Laufzeit desto höher der CPU Verbrauch (Queueing)?

Hmm, wenn Du dasselbe Skript sehr häufig ausführst (z. B. mit ab oder als CLI mit time), solltest Du bei der Laufzeit irgendwas in Richtung Normalverteilung bekommen. Die Streuung kannst Du damit eliminieren; der mittlere Bereich sollte schon signifikant für den Ressourcenverbrauch sein. Allerdings müsstest Du ausschließen, dass die Laufzeit zu einem Großteil aus I/O-Waits, also Plattenzugriffen, besteht - denn die haben streng genommen nichts mit dem Verbrauch an tatsächlicher CPU-Leistung zu tun.

Unter FreeBSD gäbe es noch den Weg, für die Ausführung der zu testenden Skripte einen eigenen User anzulegen und CPU-Accounting im Kernel zu aktivieren. Damit bekäme man eine Sicht, welcher User welchen Leistungsanteil beansprucht (natürlich auch für andere Dienste).

User avatar
Joe User
Project Manager
Project Manager
Posts: 11139
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Performance Monitoring

Post by Joe User » 2008-07-21 15:15

jfreund wrote:Unter FreeBSD gäbe es noch den Weg, für die Ausführung der zu testenden Skripte einen eigenen User anzulegen und CPU-Accounting im Kernel zu aktivieren.

Dat gibbet bei Linux och, im Kernel als "General Setup -> BSD Process Accounting" und die Userspace-Tools je nach Distri unterschiedlich, bei Gentoo sys-process/acct ;)
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

simcen
Posts: 333
Joined: 2003-02-12 14:35
Location: Bern, Schweiz

Re: Performance Monitoring

Post by simcen » 2008-07-23 20:01

Könnte auf einem produktiven System schwierig werden ;) Auf dem Entwicklungssystem fehlt mir die Möglichkeit, eine reale Benutzerlast darstellen zu können (Verteilung read/write, unterschiedliche Think-Times...).
Code-Optimieren ist einfacher gesagt als getan - wonach suche ich eigentlich? Ist schwierig...