Date post: | 21-Jan-2015 |
Category: |
Technology |
Upload: | michal-hatak |
View: | 583 times |
Download: | 3 times |
Profilování PHP aplikací
Michal Haták Čtvrtkon3.10.2013
O mně
Lead developer @ INIZIO Internet Media
PHP a CoffeeScript
@Twistacz
blog.twista.cz
Co je vůbec profilování ?
“Profilování je vyhledávání míst v programu, které jsou vhodné pro
optimalizaci”
Cíl: nalezení pomalých částí aplikace
1. krok - měření
Získání statistických údajů o běžícím programu
Co můžeme měřit ?
● Paměť● Čas● Počet a délku volání funkcí● ...
2. krok – profilovací analýza
Z naměřených údajů získáváme různé statistiky
Provádíme optimalizace
Profilování můžeme rozdělit na dva druhy
Zkusíme změnit konfiguraci/kód a změříme rozdíl
Běžné profilování
Aghhhh, Aplikace neběží!!Proč je tak pomalá? Rychle, opravit!
Kritické profilování
Obvykle budete radějiv první situaci
ideální je profilovat během vývoje na reálných datech
sledovat prvotní známky „pomalosti“
dát si pozor na kritická místa
Aplikace
Nástroje
microtime();
memory_get_usage();
memory_get_peak_usage();
Nástroje
microtime();
memory_get_usage();
memory_get_peak_usage();
Nástroje
xDebug
XHprof
Co mají společného
extenze do PHP
shromažďují data
pomáhají nám nalézt úzká místa
XHProf
open source (3/09)
production-ready (malý režijní čas)
pecl extension
vestavěný „prohlížeč“
github.com/facebook/xhprof
Linux:
> sudo pecl install xhprof-beta
[xhprof]
extension=xhprof.so
xhprof.output_dir=/tmp/xhprof
> sudo service apache2 restart
Windows:
http://dev.freshsite.pl/php-extensions/xhprof.html
Instalace
XHGui
open source vylepšené GUI
jednoduché nasadit
pokročilejší konfigurace
github.com/preinheimer/xhgui
Instalace XHGui
git clone https://github.com/preinheimer/xhgui
cd xhgui
chmod -R 0777 cache
php install.php //composer
Nasazení - XHGui
// .htaccess
php_value auto_prepend_file "way/to/xhgui/external/header.php"
nebo
// php.ini
auto_prepend_file = "way/to/xhgui/external/header.php"
// Obtain the answer to life, the universe, // and your application one time out of a hundred
if (rand(0, 100) !== 42) { return;}
Nasazení – bez XHGui
xhprof_enable();
...
$data = xhprof_disable();
$xhp = new XHProfRuns_Default();
$xhpId = $xhp->save_run($data, "name");
zdrojak.cz/clanky/profilovani-php-skriptu-pomoci-xhprof/
Spustíme aplikaci
a hurá do XHGui
Úvodní obrazovka
Obrazovka běhu
Přehled volaných funkcí/metod
Exclusive
čas strávený přímo v těle funkce
Inclusive
čas strávený v celém "podstromu funkcí"
Co můžeme měřit
Callgraph
graphviz
xDebug
víc než profiler
vylepšuje klasický error reporting (stack trace)
debuging (+ provázání s IDE)
open source
Instalace
xdebug.org/wizard.php
copy & paste phpinfo();
xdebug.profiler_enable = 1
xdebug.profiler_output_dir = /tmp
xdebug.profiler_enable_trigger = 1
valgrind-format
Jsou potřeba speciální programy na prohlížení záznamů
WinCacheGrind – Windowsgithub.com/jokkedk/webgrind
KCacheGrind – Linuxkcachegrind.sourceforge.net
WebGrind – Webgithub.com/jokkedk/webgrind
Webgrind
xDebug vs. XHProf
+ komplexnější
- problém s legacy
+ memory tracking
+ menší logy (10-15x)
+ rychlejší
Pár tipů
Snažte se přiblížit produkční verzi
Reálná data
Provoz (ab, siege)
Pár tipů
Neztrácejte čas mikrooptimalizacemi
v produkci není třeba logovat vše
Otázky?
Děkuji za pozornost!
@Twistacz
blog.twista.cz