Profiler

Školení, která pořádám

Zastávám názor, že už při psaní kódu bychom měli mít na paměti rychlost jeho vykonávání. Samozřejmě by to nemělo být v rozporu s kvalitou kódu, ale naopak v souladu s ní – vyhýbat se zbytečně složitým konstrukcím a vytvářet elegantní kód, který se bude nejen dobře spravovat, ale zároveň i rychle vykonávat. Pokud však na rychlost vykonávání kódu při psaní nemyslíme, nebo pokud je i přes to kód pomalý, přichází ke slovu profiler. Ten nám řekne, kde naše aplikace tráví nejvíce času.

Pro PHP je k dispozici profilerů několik, některé jsou přímo součástí vývojových prostředí, já mám dobrou zkušenost s rozšířením APD, což je rozšíření přímo do Zend enginu, v php.ini se tedy aktivuje direktivou zend_extension_ts = C:/PHP/ext/php_apd.dll nebo podobnou. Poté stačí v okamžiku, kdy chceme zahájit profilování, zavolat funkci apd_set_pprof_trace, čímž vznikne soubor, který lze následně analyzovat třeba skriptem pprofp. Výstup potom vypadá např. takto:

%TimeRealUserSystemCallssecs/callsumm s/callName
exclcummexclcummexclcumm
33.30.020.020.020.020.000.0070.00290.00require_once
33.30.010.010.020.020.000.00550.00040.00sprintf
33.30.000.000.020.020.000.001440.00010.00feof

Z tohoto výstupu se dá následně poznat, ve kterých funkcích skript tráví nejvíce času, a na tato místa se následně zaměřit.

Dobrou alternativou je Xdebug spolu s WinCacheGrind nebo KCachegrind.

U většiny webových aplikací problém nicméně není v rychlosti PHP kódu, ale v práci s databází. Té můžeme nejlépe pomoci správným návrhem indexů.

Přijďte si o tomto tématu popovídat na školení Výkonnost webových aplikací.

Jakub Vrána, Seznámení s oblastí, 27.11.2006, diskuse: 5 (nové: 0)

Diskuse

error414:

ja mam nejlepsi zkusenosti s xdebugem, ten obsahuje i docela dobry profiler, ve verzi 2 uz i nejak pocita s pameti, ale to nemam prostudovane.

http://www.error414.com/clanek_263.html

Farin:

Take muzu potvrdit dobre zkusenosti s xdebugem.
Navic ve spojeni napr s KCachegridnem umi generovat moc pekny graficky vystupy.

ikona spaze:

Ještě je (bylo) třeba nastavit dumpdir, z mého php.ini:

[APD]
; Do not include trailing slash, you'll get "no dumpdir specified" error.
apd.dumpdir = "C:/Program Files/PHP/Traces"

černoch:

Tak jsem vymýšlel jak nainstalovat APD na linux server, když v ubuntu je jenom pro verzi 4 "apt-cache search apd php" a při úspěšném pokusu o nainstalování aspoň xdebug "pecl install xdebug-beta" (http://xdebug.org/install.php) jsem zjistil, že stejně musí jít nainstalovat i APD "pecl install apd" (dál jsem to nezkoušel, protože zkouším ten xdebug-beta). Jinak pro tyhle příkazy (pecl, pear) hádám bude potřeba mít nainstalový PEAR a dev "apt-get install php-pear php5-dev".

error414:

na xdebug staci stahnout zdrojove kody, zkompilovat. Vytvori se php modul a ten po te pridat do php.ini. Mam to vyskousene na ubuntu, gentoo a archu.

Diskuse je zrušena z důvodu spamu.

avatar © 2005-2024 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.