Uniвсячина

понемножку о Linux и программировании

Профайлинг PHP-приложений на Debian Sarge

Когда какой нибудь сайт на PHP начинает тормозит и кушать ресурсы, первое что приходиться делать — локализовать кто жрёт проц, MySQL или PHP. Если мускул, то включаем mytop и начинаем шаманить с индексами и оптимизацией запросов. Если PHP – то все несколько сложнее. С помощью mod_status в Apache можно приблизительно прикинуть какие запросы грузят. Но посмотреть, что именно грузит, не так просто. Необходимо воспользоваться profiling tools.

Для PHP есть два наиболее популярных профайлера – APD: и Xdebug. Первый достаточно примитивен и с 2004 года не развивается. Поэтому будем использовать более продвинутый и мощный вариант – xdebug.

apt-get install php4-dev php4-pear
pear install xdebug

Добавляем в php.ini:

zend_extension="/usr/lib/php4/20020429/xdebug.so"

Перезагружаем апач:

apache2 -t
apache2ctl restart

Делаем тестовую пхп-страничку с <? phpinfo(); ?> и проверяем, чтобы в браузере появилась строчка:

This program makes use of the Zend Scripting Language Engine:
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
with Xdebug v1.3.2, Copyright (c) 2002, 2003, by Derick Rethans

Предположим мы хотим профилировать файл index.php. Создаем его копию с именем index_prof.php и добавлаем в начало страницы вызов функции xdebug_start_profiling(), а в конец вызов xdebug_dump_function_profile(XDEBUG_PROFILER_FS_SUM) и xdebug_stop_profiling(). XDEBUG_PROFILER_FS_SUM – константа задающая режим отчета.

Открываем в браузере http://domain.tld/index_prof.php и получаем после тега </html> аккуратную табличку с результатами профайлинга.

Comments