RkBlog

Hardware, programming and astronomy tutorials and reviews.

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, Piotr Maliński

Comment article