Pokaż kotku, co masz w środku profilowanie aplikacji z xhprof

Post on 01-Jul-2015

1.011 views 0 download

description

Czym jest, jak korzystać i jak działa xhprof?

Transcript of Pokaż kotku, co masz w środku profilowanie aplikacji z xhprof

Pokaż kotku, co masz w środkuprofilowanie aplikacji z xhprof

/ Patryk Szlagowski @abdulklarapl

Patryk Szlagowski / patrykuss

Programista w @freenode: #hackerspace-pl, #hackerspace-3m

@abdulklaraplabdulklara.pl

nokaut.pl

Szybki spis treści1. xhprof - czymże jest?

xhprof - trochę terminologii2. Jak korzystać?3. Jak to działa?4. Historie wykorzystania5. Callgraph - catch them all!6. Po ilu foriczach Ty się uśmiechniesz?

przykładowe callgraphy

7. Nokautowe GUI - hydra8. Co jeszcze?9. Podsumowanie

1. xhprof - czymże jest?narzędzie od Facebookrozszerzenie pecloweświetny profiler, pomagający ZROZUMIEĆ kodwykonywany przez aplikacjęmapa wywołań funkcji/metodkoszt czasowy, wykorzystane zasoby

1.5. xhprof - trochęterminologii

main() - abstrakcyjna funkcja będąca najwyższymrodzicemload::<filename> - include/require WYKONANE przezinterpeter (pomijane przy np. APC)run_init::<filename> - wykonanie kodu z pliku winclude/requireWall Time - zwyczajny czasCPU Time - czas CPU użytkownika i kernelaInclusive time - czas wykonania danej funkcji WRAZ zdziecmiExclusive time - czas wykonania danej funkcji BEZ dzieci

2. Jak korzystać?<?phpxhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

[...]

$xhprof_data = xhprof_disable();include_once "*/xhprof_lib/utils/xhprof_lib.php";include_once "*/xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHProfRuns_Default();

$run_id = $xhprof_runs->save_run($xhprof_data, "my_test");echo '<a href="http://localhost/****/xhprof_html/index.php?run='.$run_id.'&source=my_test">wyniki</a>';

Prawda, że łatwe?

3. Jak to działa?od xhprof_enable(); profiler zastępuje metody wywołującephpowe funkcje

zlicza czas wykorzystany na callsprawdza koszty time/cpu/memoryzwiększa licznik wywołańwiąże wywołania

xhprof_disable(); zwraca w tablicy zebrane dane

callgraph rysuje diagram wywołań metod/funkcjiuwzględniając:

licznik wywołań poszczególnej funkcjikoszty time/cpu/memorygłówną ścieżkę wykonania skryptucałkowity czas wykonywania skryptu

Jak to właściwie działa?PHP_FUNCTION(xhprof_enable) {long xhprof_flags = 0;zval *optional_array = NULL;

[..]

hp_begin(XHPROF_MODE_HIERARCHICAL, xhprof_flags TSRMLS_CC);

static void hp_begin(long level, long xhprof_flags TSRMLS_DC) { if (!hp_globals.enabled) { int hp_profile_flag = 1;

[..]

_zend_execute = zend_execute; zend_execute = hp_execute;

_zend_execute_internal = zend_execute_internal; if (!(hp_globals.xhprof_flags & XHPROF_FLAGS_NO_BUILTINS)) { zend_execute_internal = hp_execute_internal; }

github.com/facebook/xhprof

4. Callgraphwykorzystuje DOT i graphiztworzy skrypt w DOT do narysowania grafubazuje na danych prosto z xhprof_disable();formaty do wyboru pdf,png,jpg,SVG!

5. Po ilu foriczach Ty się uśmiechniesz?

<?php for ($i=0;$i<1000;$i++) { var_dump(time(), strtotime(date("d-m-Y H:i:s"))); }

github.com/abdulklarapl/MoreJson

Zend Framework

Symfony2

Zend Framework - znowu

6. Wykorzystanie w "realu"Zwiększony czas ładowania się stron w Nokauciepewnego dnia zaczęła wolniej ładować się jedna z podstronposzukiwania zmian mogących mieć wpływ w historiirepo?XHPROF!problem: SOAP i CACHE_WSDL_NONE

7. Nokautowe GUI - Hydrapowstało z myślą o wielu aplikacjachnie pasowało nam GUI w standardzie od FB :)wykorzystujemy kolejkipodgląd callgrapha jednym kliknięciemTwitter Bootstrap

soon

8. Co jeszcze?thrifft - framework zdalnego wywołania proceduryhiphop-php - kompilator PHP do C++

9. Podsumowanie Pytania?

KoniecDziękuję za uwagę

Patryk Szlagowski / patrykuss

Programista w @freenode: #hackerspace-pl, #hackerspace-3m

@abdulklaraplabdulklara.pl

nokaut.pl