Laufzeit von Codeabschnitten/Funktionen überwachen
am 26.07.2006 10:25:13 von Jens Sieckmann
Hallo zusammen,
ich möchte gerne innerhalb eines PHP-Skripts die Laufzeit von
bestimmten Codeabschnitten oder Funktionen messen und darauf
reagieren können. Z.B. soll eine Funktion überwacht werden, die
eine komplexe Datenbankabfrage tätigt. Dauert das Ausführen der
Anfrage länger als x Sekunden, soll sie abgebrochen werden und
z.B. einen Log-Eintrag erzeugen ("Anfrage dauerte zu lange").
Wie kann ich das bewerkstelligen? Ist das möglicherweise mit dem
Exceptionmodell von PHP5 möglich oder kann ich sowas auch mit
PHP4 lösen?
Gruß und danke im Voraus
Jens
Re: Laufzeit von Codeabschnitten/Funktionen überwachen
am 26.07.2006 11:01:49 von Ulf Kadner
Jens Sieckmann wrote:
> ich möchte gerne innerhalb eines PHP-Skripts die Laufzeit von
> bestimmten Codeabschnitten oder Funktionen messen und darauf
> reagieren können. Z.B. soll eine Funktion überwacht werden, die
> eine komplexe Datenbankabfrage tätigt. Dauert das Ausführen der
> Anfrage länger als x Sekunden, soll sie abgebrochen werden und
> z.B. einen Log-Eintrag erzeugen ("Anfrage dauerte zu lange").
Da hast Du wohl wenig Chancen mit PHP direkt drauf Einfluss zu nehmen.
Multithreading kennt PHP so nicht.
Was Du tun kannst, ist die zeitintensive Routine in ein separates
Script auszulagern. Dieses dann mit exec & Co so aufrufen, das diese im
Hintergrund ausgefuehrt wird. Wie das geht sagt Dir die Dokumentation
der Kommandozeile Deines genutzten OS.
Bsp für forken unter Unix:
exec('/usr/bin/php ./script.php > /dev/null 2>&1 &');
Wenn das Script dann fertig ist, must es irgendwo Daten hinterlegen, die
darauf schliessen lassen, das es fertig ist (z.B. in DB oder Datei).
Im aufrufenden Script must Du dann ne schleife implementieren, die
z.B. sleep(...) aufruft. Wenn die max. Zeit abgelaufen ist und das
geforkte Script noch nicht fertig ist schmeist Du halt eine Ausnahme
oder gibst direkt ne Fehlermeldung aus.
Ist zwar nur ne Krücke, aber was besseres fällt mir dazu nicht ein.
MfG, Ulf