Cross publikowanie mojej referencji z wersji beta Dokumentacji SO, która przechodzi w tryb offline.
Profilowanie za pomocą XDebug
Dostępne jest rozszerzenie PHP o nazwie Xdebug, które pomaga profilować aplikacje PHP , a także debugować środowisko uruchomieniowe. Po uruchomieniu profilera dane wyjściowe są zapisywane w pliku w formacie binarnym o nazwie „cachegrind”. Aplikacje są dostępne na każdej platformie do analizy tych plików. Żadne zmiany kodu aplikacji nie są konieczne do wykonania tego profilowania.
Aby włączyć profilowanie, zainstaluj rozszerzenie i dostosuj ustawienia php.ini. Niektóre dystrybucje Linuksa są dostarczane ze standardowymi pakietami (np. php-xdebug
Pakiet Ubuntu ). W naszym przykładzie profil zostanie uruchomiony opcjonalnie na podstawie parametru żądania. Pozwala nam to zachować ustawienia statyczne i włączyć profiler tylko w razie potrzeby.
# php.ini settings
# Set to 1 to turn it on for every request
xdebug.profiler_enable = 0
# Let's use a GET/POST parameter to turn on the profiler
xdebug.profiler_enable_trigger = 1
# The GET/POST value we will pass; empty for any value
xdebug.profiler_enable_trigger_value = ""
# Output cachegrind files to /tmp so our system cleans them up later
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%p"
Następnie użyj klienta WWW, aby wysłać zapytanie do adresu URL aplikacji, który chcesz profilować, np
http://example.com/article/1?XDEBUG_PROFILE=1
Gdy strona przetwarza, zapisuje do pliku o nazwie podobnej do
/tmp/cachegrind.out.12345
Domyślnie liczba w nazwie pliku to identyfikator procesu, który ją napisał. Można to skonfigurować za pomocą tego xdebug.profiler_output_name
ustawienia.
Zauważ, że zapisze jeden plik dla każdego wykonywanego żądania / procesu PHP. Na przykład, jeśli chcesz przeanalizować post formularza, zostanie napisany jeden profil dla żądania GET, aby wyświetlić formularz HTML. Parametr XDEBUG_PROFILE będzie musiał zostać przekazany do kolejnego żądania POST, aby przeanalizować drugie żądanie, które przetwarza formularz. Dlatego podczas profilowania czasami łatwiej jest uruchomić curl, aby bezpośrednio POST formularza.
Analiza wyniku
Po napisaniu pamięć podręczna profilu może być odczytana przez aplikację taką jak KCachegrind lub Webgrind . PHPStorm, popularne PHP IDE, może również wyświetlać te dane profilowania .
Na przykład KCachegrind wyświetli informacje, w tym:
- Funkcje wykonane
- Czas wywołania, zarówno sam, jak i kolejne wywołania funkcji
- Liczba wywołań każdej funkcji
- Wykresy połączeń
- Linki do kodu źródłowego
Czego szukać
Oczywiście dostrajanie wydajności jest bardzo specyficzne dla przypadków użycia każdej aplikacji. Ogólnie dobrze jest poszukać:
- Powtarzane połączenia z tą samą funkcją, której nie spodziewałbyś się zobaczyć. W przypadku funkcji przetwarzających i wyszukujących dane mogą to być najważniejsze możliwości buforowania aplikacji.
- Funkcje wolno działające. Gdzie aplikacja spędza większość czasu? najlepsza wypłata w zakresie dostrajania wydajności koncentruje się na tych częściach aplikacji, które zużywają najwięcej czasu.
Uwaga : Xdebug, a w szczególności jego funkcje profilowania, bardzo pochłaniają zasoby i spowalniają wykonywanie PHP. Zaleca się, aby nie uruchamiać ich w środowisku serwera produkcyjnego.