Pokaż kotku, co masz w środku profilowanie aplikacji z xhprof
-
Upload
patryk-szlagowski -
Category
Technology
-
view
1.013 -
download
0
description
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