Profiling PHP Applications

Post on 21-Jan-2015

583 views 3 download

description

Ctvrtkon 03/10/2013

Transcript of Profiling PHP Applications

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

Facebook

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