PHP muss die CPU-Zeit verfolgen, die ein bestimmtes Skript verwendet hat, um das Limit für max_execution_time durchzusetzen.
Gibt es eine Möglichkeit, innerhalb des Skripts darauf zuzugreifen? Ich möchte meinen Tests einige Protokollierungen hinzufügen, wie viel CPU im eigentlichen PHP verbrannt wurde (die Zeit wird nicht erhöht, wenn das Skript sitzt und auf die Datenbank wartet).
Ich benutze eine Linux-Box.
php
performance
twk
quelle
quelle
utime
/stime
/ Wanduhrzeit ? Und können Sie einen Link zu einem reproduzierbaren Beispiel veröffentlichen , das dieses Verhalten zeigt? Auf welcher OS / PHP-Version / Webserver-Version sind Sie? In jedem Fall möchten Sie möglicherweise eine neue Frage stellen und hier darauf verlinken.Wenn Sie lediglich die Wanduhrzeit und nicht die CPU-Ausführungszeit benötigen, ist die Berechnung einfach:
Beachten Sie, dass dies die Zeit einschließt, in der PHP auf externe Ressourcen wie Festplatten oder Datenbanken wartet, die nicht für max_execution_time verwendet werden.
quelle
Kürzere Version der Antwort von talal7860
Wie bereits erwähnt, ist dies "Wanduhrzeit" und nicht "CPU-Zeit".
quelle
Der einfachste Weg:
quelle
60
.. Kein Unterschied in der Tat.quelle
Ich habe eine ExecutionTime-Klasse aus einer Phihag-Antwort erstellt, die Sie sofort verwenden können:
Verwendung:
quelle
getrusage
funktioniert nur seit PHP 7.Gringod von developerfusion.com gibt diese gute Antwort:
Von ( http://www.developerfusion.com/code/2058/determine-execution-time-in-php/ )
quelle
Es wird schöner, wenn Sie die Sekundenausgabe wie folgt formatieren:
wird gedruckt
Das ist viel besser als
quelle
Der billigste und schmutzigste Weg, dies zu tun, besteht darin, einfach
microtime()
an Stellen in Ihrem Code zu telefonieren, die Sie als Benchmark verwenden möchten. Wenn Sie dies direkt vor und direkt nach Datenbankabfragen tun, können Sie diese Dauer einfach aus dem Rest Ihrer Skriptausführungszeit entfernen.Ein Hinweis: Ihre PHP-Ausführungszeit ist selten das, was Ihr Skript-Timeout verursacht. Wenn ein Skript eine Zeitüberschreitung aufweist, wird fast immer eine externe Ressource aufgerufen.
PHP-Microtime-Dokumentation: http://us.php.net/microtime
quelle
Ich denke, Sie sollten sich xdebug ansehen. Die Profilierungsoptionen verschaffen Ihnen einen Vorsprung bei der Kenntnis vieler prozessbezogener Elemente.
http://www.xdebug.org/
quelle
Um Minuten und Sekunden anzuzeigen, können Sie Folgendes verwenden:
quelle
Ich habe eine Funktion geschrieben, die die verbleibende Ausführungszeit überprüft.
Warnung: Die Zählung der Ausführungszeit ist unter Windows und Linux unterschiedlich.
Verwenden von:
quelle
Möglicherweise möchten Sie nur die Ausführungszeit von Teilen Ihres Skripts kennen. Die flexibelste Möglichkeit, Teile oder ein gesamtes Skript zu zeitigen, besteht darin, drei einfache Funktionen zu erstellen (hier angegebener Prozedurcode, aber Sie können ihn in eine Klasse verwandeln, indem Sie den Klassen-Timer {} darum legen und einige Änderungen vornehmen). Dieser Code funktioniert, einfach kopieren und einfügen und ausführen:
quelle
$_SERVER['REQUEST_TIME']
Schau dir das auch an. dh
quelle
Alternativ können Sie diese Zeile einfach in Ihre Codeblöcke einfügen und die PHP-Protokolle überprüfen. Für sehr langsame Funktionen ist dies ziemlich nützlich:
Informationen zum ernsthaften Debuggen mit XDebug + Cachegrind finden Sie unter https://blog.nexcess.net/2011/01/29/diagnosing-slow-php-execution-with-xdebug-and-kcachegrind/
quelle
Um Hamids Antwort weiter auszubauen, habe ich eine Hilfsklasse geschrieben, die wiederholt gestartet und gestoppt werden kann (zum Profilieren innerhalb einer Schleife).
quelle
return microtime (true) - $ _SERVER ["REQUEST_TIME_FLOAT"];
quelle