RkBlog

Hardware, programming and astronomy tutorials and reviews.

Xdebug - profilowanie aplikacji PHP

Xdebug to program do profilowania i debugowania kodu PHP. Od wersji 2.* posiada znacznie wi臋cej opcji i mo偶liwo艣ci. Dokumentacja jak i sama aplikacja dost臋pna jest na stronie projektu www.xdebug.org. Poni偶ej om贸wi臋 kilka ciekawszych opcji Xdebug.

Zu偶ycie pami臋ci

Je偶eli PHP skompilowane zosta艂o z opcj膮 --enable-memory-limit to w xdebug b臋dziemy mie膰 dost臋p do funkcji xdebug_memory_usage() i xdebug_peak_memory_usage(). Pierwsza zwraca (int) ilo艣膰 zajmowanej pami臋ci przez wykonuj膮cy si臋 w艂a艣nie skrypt, druga zwraca najwi臋ksze zu偶ycie pami臋ci (od pocz膮tku do momentu wywo艂ania funkcji)
<?php
$x = file_get_contents('a.pdf');
echo xdebug_peak_memory_usage()/1048576;
Po wczytaniu 4.6MB plik pdf funkcja xdebug zwraca pik 4.61658477783 MB zaj臋tej pami臋ci.

艢ledzenie wykonywania si臋 kodu

xdebug_start_trace(string trace_file [, integer options]) - za pomoc膮 tej funkcji uruchamiamy 艣ledzenie wykonywania si臋 kodu. Pierwszy parametr to nazwa pliku, do kt贸rego maj膮 by膰 zapisane dane a drugi to albo 0 albo 1 - ustala formatowanie danych, w przypadku 1 dane b臋d膮 dodatkowo dopisywane do pliku (nie b臋d膮 nadpisywane istniej膮ce dane.
<?php
xdebug_start_trace('a', 0);
$x = file_get_contents('a.pdf');
$x = substr($x, 0, 1000);
$x = base64_encode($x);
xdebug_stop_trace();
Przyk艂adowy wynik:
TRACE START [2008-11-11 19:04:15]
    0.0012     189752     -> define() /srv/http/html/punbb-1.2.20/index.php:27
    0.0017     264176     -> require(/srv/http/html/punbb-1.2.20/include/common.php) /srv/http/html/punbb-1.2.20/index.php:28
    0.0017     264176       -> defined() /srv/http/html/punbb-1.2.20/include/common.php:32
    0.0048     850384       -> require(/srv/http/html/punbb-1.2.20/include/functions.php) /srv/http/html/punbb-1.2.20/include/common.php:37
    0.0048     850456         -> function_exists() /srv/http/html/punbb-1.2.20/include/functions.php:653

Profiler Kodu

Wystarczy doda膰 do php.ini:
xdebug.profiler_enable=1
xdebug.extended_info=0
xdebug.remote_enable=0
xdebug.auto_trace=0
xdebug.profiler_output_dir=/艣cie偶ka/do/katalogu
Gdzie /艣cie偶ka/do/katalogu to 艣cie偶ka do katalogu, w kt贸rym umieszczane b臋d膮 dane z profilera (kalog musi mie膰 odpowiednie uprawnienia zapisu). Ka偶de wykonanie dowolnego skryptu PHP spowoduje wygenerowanie pliku wynikowego z danymi dla KcacheGrind. Dla ostatniego przyk艂adu:
xdebug

Instalacja KcacheGrind

Pod MS Windows istnieje "wingrind", lecz jest to stara aplikacja i brakuje jej funkcjonalno艣ci dost臋pnej w KCachegrind jak np. wizualizacja zu偶ycia zasob贸w przez poszczeg贸lne bloki kodu. Pod Linuksem i Uniksami Kcachegrind mo偶na zainstalowac z repozytorium, jest to aplikacja wchodz膮ca w sk艂ad KDE. Je偶eli nie ma oddzielnego pakietu nale偶y zainstalowa膰 pakiet kdesdk.

Dla MS Windows nale偶y u偶y膰 instalatora aplikacji KDE4 z winkde.org. Pobieramy instalator i przy instalowaniu pakiet贸w wybieramy kdesdk (oraz opcjonalnie pakiet z t艂umaczeniami i graphiz).

W przypadku Mac OS X mo偶na skorzysta膰 z pakiet贸w dost臋pnych w repozytorium Fink, czy te偶 Darwin Ports, lub u偶y膰 pakiet贸w z KDE 4 Mac (nie testowa艂em).

RkBlog

PHP w Akcji, 19 November 2008, Piotr Mali艅ski

Comment article