Profiling PHP Applications

41
Profilování PHP aplikací Michal Haták Čtvrtkon 3.10.2013

description

Ctvrtkon 03/10/2013

Transcript of Profiling PHP Applications

Page 1: Profiling PHP Applications

Profilování PHP aplikací

Michal Haták Čtvrtkon3.10.2013

Page 2: Profiling PHP Applications

O mně

Lead developer @ INIZIO Internet Media

PHP a CoffeeScript

@Twistacz

blog.twista.cz

Page 3: Profiling PHP Applications

Co je vůbec profilování ?

“Profilování je vyhledávání míst v programu, které jsou vhodné pro

optimalizaci”

Page 4: Profiling PHP Applications

Cíl: nalezení pomalých částí aplikace

Page 5: Profiling PHP Applications

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í● ...

Page 6: Profiling PHP Applications

2. krok – profilovací analýza

Z naměřených údajů získáváme různé statistiky

Provádíme optimalizace

Page 7: Profiling PHP Applications

Profilování můžeme rozdělit na dva druhy

Page 8: Profiling PHP Applications

Zkusíme změnit konfiguraci/kód a změříme rozdíl

Běžné profilování

Page 9: Profiling PHP Applications

Aghhhh, Aplikace neběží!!Proč je tak pomalá? Rychle, opravit!

Kritické profilování

Page 10: Profiling PHP Applications

Obvykle budete radějiv první situaci

Page 11: Profiling PHP Applications

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

Page 12: Profiling PHP Applications

Aplikace

Page 13: Profiling PHP Applications

Nástroje

microtime();

memory_get_usage();

memory_get_peak_usage();

Page 14: Profiling PHP Applications

Nástroje

microtime();

memory_get_usage();

memory_get_peak_usage();

Page 15: Profiling PHP Applications

Nástroje

xDebug

XHprof

Page 16: Profiling PHP Applications

Co mají společného

extenze do PHP

shromažďují data

pomáhají nám nalézt úzká místa

Page 17: Profiling PHP Applications

XHProf

Facebook

open source (3/09)

production-ready (malý režijní čas)

pecl extension

vestavěný „prohlížeč“

github.com/facebook/xhprof

Page 18: Profiling PHP Applications

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

Page 19: Profiling PHP Applications

XHGui

open source vylepšené GUI

jednoduché nasadit

pokročilejší konfigurace

github.com/preinheimer/xhgui

Page 20: Profiling PHP Applications

Instalace XHGui

git clone https://github.com/preinheimer/xhgui

cd xhgui

chmod -R 0777 cache

php install.php //composer

Page 21: Profiling PHP Applications

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"

Page 22: Profiling PHP Applications

// Obtain the answer to life, the universe, // and your application one time out of a hundred

if (rand(0, 100) !== 42) { return;}

Page 23: Profiling PHP Applications

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/

Page 24: Profiling PHP Applications

Spustíme aplikaci

a hurá do XHGui

Page 25: Profiling PHP Applications

Úvodní obrazovka

Page 26: Profiling PHP Applications

Obrazovka běhu

Page 27: Profiling PHP Applications

Přehled volaných funkcí/metod

Page 28: Profiling PHP Applications

Exclusive

čas strávený přímo v těle funkce

Inclusive

čas strávený v celém "podstromu funkcí"

Co můžeme měřit

Page 29: Profiling PHP Applications
Page 30: Profiling PHP Applications

Callgraph

Page 31: Profiling PHP Applications

graphviz

Page 32: Profiling PHP Applications
Page 33: Profiling PHP Applications

xDebug

víc než profiler

vylepšuje klasický error reporting (stack trace)

debuging (+ provázání s IDE)

open source

Page 34: Profiling PHP Applications

Instalace

xdebug.org/wizard.php

copy & paste phpinfo();

xdebug.profiler_enable = 1

xdebug.profiler_output_dir = /tmp

xdebug.profiler_enable_trigger = 1

Page 35: Profiling PHP Applications

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

Page 36: Profiling PHP Applications

Webgrind

Page 37: Profiling PHP Applications

xDebug vs. XHProf

+ komplexnější

- problém s legacy

+ memory tracking

+ menší logy (10-15x)

+ rychlejší

Page 38: Profiling PHP Applications

Pár tipů

Snažte se přiblížit produkční verzi

Reálná data

Provoz (ab, siege)

Page 39: Profiling PHP Applications

Pár tipů

Neztrácejte čas mikrooptimalizacemi

v produkci není třeba logovat vše

Page 40: Profiling PHP Applications

Otázky?

Page 41: Profiling PHP Applications

Děkuji za pozornost!

@Twistacz

blog.twista.cz