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

35
Pokaż kotku, co masz w środku profilowanie aplikacji z xhprof / Patryk Szlagowski @abdulklarapl

description

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

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

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

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

/ Patryk Szlagowski @abdulklarapl

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

Patryk Szlagowski / patrykuss

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

@abdulklaraplabdulklara.pl

nokaut.pl

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

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

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

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

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

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

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

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>';

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

Prawda, że łatwe?

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

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

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

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

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

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);

Page 11: Pokaż kotku, co masz w środku   profilowanie aplikacji z xhprof
Page 12: Pokaż kotku, co masz w środku   profilowanie aplikacji z xhprof

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; }

Page 13: Pokaż kotku, co masz w środku   profilowanie aplikacji z xhprof
Page 14: Pokaż kotku, co masz w środku   profilowanie aplikacji z xhprof

github.com/facebook/xhprof

Page 15: Pokaż kotku, co masz w środku   profilowanie aplikacji z 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!

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

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

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

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

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

github.com/abdulklarapl/MoreJson

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

Zend Framework

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

Symfony2

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

Zend Framework - znowu

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

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

Page 27: Pokaż kotku, co masz w środku   profilowanie aplikacji z xhprof
Page 28: Pokaż kotku, co masz w środku   profilowanie aplikacji z xhprof

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

Page 29: Pokaż kotku, co masz w środku   profilowanie aplikacji z xhprof
Page 30: Pokaż kotku, co masz w środku   profilowanie aplikacji z xhprof
Page 31: Pokaż kotku, co masz w środku   profilowanie aplikacji z xhprof

soon

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

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

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

9. Podsumowanie Pytania?

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

KoniecDziękuję za uwagę

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

Patryk Szlagowski / patrykuss

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

@abdulklaraplabdulklara.pl

nokaut.pl