PHP musi śledzić czas procesora wykorzystany przez dany skrypt w celu wymuszenia limitu max_execution_time.
Czy istnieje sposób na uzyskanie dostępu do tego w skrypcie? Chciałbym dołączyć do moich testów rejestrowanie, ile procesora zostało spalone w rzeczywistym PHP (czas nie jest zwiększany, gdy skrypt siedzi i czeka na bazę danych).
Używam Linux-a.
php
performance
twk
źródło
źródło
utime
/stime
/ zegar ścienny? Czy możesz opublikować link do odtwarzalnego przykładu, który pokazuje to zachowanie? Na jakiej wersji OS / php / webserver jesteś? W każdym razie możesz opublikować nowe pytanie i link do niego tutaj.Jeśli potrzebujesz jedynie czasu naściennego zamiast czasu wykonania procesora, możesz łatwo obliczyć:
Zauważ, że będzie to obejmować czas oczekiwania PHP na zasoby zewnętrzne, takie jak dyski lub bazy danych, które nie są używane przez max_execution_time.
źródło
Krótsza wersja odpowiedzi talal7860
Jak wskazano, jest to „czas zegara ściennego”, a nie „czas procesora”
źródło
Najłatwiejszy sposób:
źródło
60
... Rzeczywiście nie ma różnicy.źródło
Utworzyłem klasę ExecutionTime na podstawie odpowiedzi phihag, z której można korzystać po wyjęciu z pudełka:
stosowanie:
źródło
getrusage
działa tylko od PHP 7.Gringod na developerfusion.com daje dobrą odpowiedź:
Od ( http://www.developerfusion.com/code/2058/determine-execution-time-in-php/ )
źródło
Będzie ładniej, jeśli sformatujesz wynik sekund w następujący sposób:
wydrukuje
To jest znacznie lepsze niż
źródło
Najtańszym i najbrudniejszym sposobem na to jest po prostu wykonywanie
microtime()
połączeń w miejscach w kodzie, które chcesz przetestować. Zrób to tuż przed zapytaniami do bazy danych i zaraz po niej, a usunięcie czasu trwania z pozostałej części czasu wykonywania skryptu jest proste.Wskazówka: Twój czas wykonania PHP rzadko powoduje przekroczenie limitu czasu skryptu. Jeśli skrypt przekroczy limit czasu, prawie zawsze będzie to wezwanie do zewnętrznego zasobu.
Dokumentacja mikrotimowa PHP: http://us.php.net/microtime
źródło
Myślę, że powinieneś spojrzeć na xdebug. Opcje profilowania pozwolą Ci szybko poznać wiele elementów związanych z procesem.
http://www.xdebug.org/
źródło
Aby wyświetlić minuty i sekundy, możesz użyć:
źródło
Napisałem funkcję, która sprawdza pozostały czas wykonania.
Ostrzeżenie: liczenie czasu wykonania jest inne w systemie Windows i na platformie Linux.
Za pomocą:
źródło
$_SERVER['REQUEST_TIME']
też to sprawdź. to znaczy
źródło
$_SERVER['REQUEST_TIME']
jest również dostępny w php-cli (gdzie nie ma serwera)Możesz chcieć znać tylko czas wykonywania części skryptu. Najbardziej elastycznym sposobem dzielenia czasu na części lub całego skryptu jest utworzenie 3 prostych funkcji (podany tutaj kod proceduralny, ale można go przekształcić w klasę, umieszczając wokół niego licznik czasu klasy {} i wprowadzając kilka poprawek). Ten kod działa, wystarczy skopiować, wkleić i uruchomić:
źródło
Alternatywnie możesz po prostu umieścić tę linię w swoich blokach kodu i sprawdzić logi php, dla naprawdę powolnych funkcji jest to bardzo przydatne:
W przypadku poważnego debugowania użyj XDebug + Cachegrind, patrz https://blog.nexcess.net/2011/01/29/diagnosing-slow-php-execution-with-xdebug-and-kcachegrind/
źródło
Rozwijając dalej odpowiedź Hamida, napisałem klasę pomocnika, którą można wielokrotnie uruchamiać i zatrzymywać (do profilowania wewnątrz pętli).
źródło
return microtime (true) - $ _SERVER ["REQUEST_TIME_FLOAT"];
źródło