Profilowanie kodu PHP za pomocą XHProf

XHProf to profiler kodu PHP opracowany przez twórców Facebooka. Pozwala on zanalizować ścieżkę wykonywania się kodu, jak i zużycie czasu procesora, pamięci, czy czasu wykonywania się poszczególnych elementów kodu. Kod dostępny jest na pecl.php.net, a dokumentacja znajduje się na stronie facebooka.

Instalacja

XHProf dostępny jest dla 32-bitowych (x86) systemów Uniksowych (Linux, BSD) jako binarne rozszerzenie PHP (najnowsza wersja wymaga PHP 5.2.0 lub nowszego). Kompilacja wygląda standardowo (do instalacji wymagane prawa roota, lub sudo, kod znajduje się w podkatalogu "extension"):

phpize && ./configure && make && make install
Po zainstalowaniu do php.ini dodajemy wpis:
extension=xhprof.so

Profilowanie kodu PHP

  • Na początku profilowanego kodu dodajemy:
    xhprof_enable(XHPROF_FLAGS_MEMORY + XHPROF_FLAGS_CPU);
  • Na końcu wstawiamy kod:
    <?php
    
    $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>';
    
    Wstawiając ścieżkę do katalogów xhprof_lib i xhprof_html skopiowanych z paczki xhprof w jakieś dostępne miejsce na serwerze (np. do katalogu z profilowanym kodem).
  • Wystarczy wykonać kod (otworzyć stronę w przeglądarce), a wyniki zostaną wygenerowane i będzie można je przeglądać pod wskazanym linkiem.
  • Dane prezentowane są w sortowalnej tabeli zawierającej dane o czasie wykonywania, zużyciu procesora i RAMu dla poszczególnych elementów kodu, jak i grafy zależności wykonywania się kodu:
    xh1
    xh2

W porównaniu do XDebug jest to narzędzie bardziej skomplikowane i dla "szybkiego" zorientowania się w wydajności kodu może być mniej pomocne. Na pewno warto zainteresować się XHProf, gdy potrzebujemy bardziej dokładnych danych (zużycie procesora, porównywanie dwóch przebiegów profilowania).

RkBlog

PHP w Akcji, 16 September 2009

Comment article
Comment article RkBlog main page Search RSS Contact