Wednesday, January 26, 2011

Профилирование с xDebug

Раз уж я создал виртуальную машину с Debian для тестирования, решил установить xDebug.

Установка
Ставить xDebug я решил из исходных кодов (source), т.к. версии репозитория и релиза очень отличаются по цифрам.
Ни в коем случае не устанавливайте xDebug на сервере с посетителями! Только на тестовом. xDebug может увеличить скорость выполнения в сотню раз (хорошо, что я узнал об этом на тестовом сервере).

Переходим в каталог дистрибутивов:
cd /dist
Скачиваем отсюда: http://www.xdebug.org/download.php#releases
wget http://www.xdebug.org/files/xdebug-2.1.0.tgz
Распаковываем:
tar -zxvf xdebug-2.1.0.tgz 
cd xdebug-2.1.0 
Подготавливаем:
phpize
Конфигурируем:
./configure --enable-xdebug 
Собираем:
make
Устанавливаем:
make install
В виде результата будет папка, в котором лежит модуль и большой текст-подсказка.
Скопируем выданный путь к папке, или сделаем
find / -name xdebug.so
Теперь редактируем php.ini:
gedit /etc/php5/apache2/php.ini 
добавляем строку
zend_extension="путь к xdebug.so"
Готово. Перезапускаем апач:
/etc/init.d/apache2 restart

Профилирование
В папке профилируемого проекта добавляем в .htaccess строки:
php_value xdebug.profiler_enable 1
php_value xdebug.profiler_output_name cachegrind.out
php_value xdebug.profiler_output_dir /home/username/shared_folder/xdebug/project_name/

Директория, указанная в output_dir должна быть доступна для записи апачу (www-data).

Результаты

Устанавливаем KCacheGrind:
apt-get -y install kcachegrind
Gnome при этом не трогается. Если в меню не добавился ярлык (Debian 6, например), правой кнопкой щёлкаем на панель задач, Add to panel... / Custom application launcher /
Command: /usr/bin/kcachegrind 





Разница между KCacheGrind и windows-утилитой очень огромна. Но, на всякий случай, для винды:
Получившийся cachegrind.out скармливаем программе WinCacheGrind.
В этой программке открываем вкладку Overall и сортируем.
Сначала по Total Self - суммарное время, затраченное на запуск функции. Возможно, функция выполняется быстро, но запускается слишком часто и в итоге тратит много времени.

Потом, когда по этому показателю уже нечего будет оптимизировать, сортируем по Avg. Self - среднее время выполнения функции.

И когда уже не осталось медленных функций, сортируем по Total Cum. - оставшиеся медленные места.

No comments:

Post a Comment