Когда какой нибудь сайт на 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>
аккуратную табличку с результатами профайлинга.