forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PHP / MySQL (http://forum.boolean.name/forumdisplay.php?f=135)
-   -   Профайлинг с помощью xdebug (http://forum.boolean.name/showthread.php?t=17604)

ABTOMAT 08.12.2012 05:47

Профайлинг с помощью xdebug
 
Иногда бывает, что ваш сайт тормозит, причём хрен разбери отчего (тяжкое "наследство", раздолбайство автора плугина для Вордпресса, или же последствия косяка проявились лишь через время после того, как сайт был запущен). Определиться с тем, какие куски кода сколько времени жрут, поможет профайлинг. Для профайлинга я предлагаю использовать xdebug.

Естественно, перво-наперво его надо установить. Рекомендации по установке зависят от ОС вашего сервера, нет смысла приводить их, just google it.

В Ubuntu-подобных дистрах достаточно для установки написать: apt-get install xdebug

К сожалению, мне повезло не столь сильно, и репозитории yum'а в моей CentOS о таком пакете не слыхали. Потыкавшись в вебе, я пришёл к выводу, что скомпилить из исходников будет быстрее (единственный способ, который работает ВСЕГДА). Вот инструкция, по которой я это делал.

Так или иначе, когда вы установили xdebug, нужно кое-что дописать в php.ini, который обычно лежит здесь: /etc/php.ini

В нём я добавил следующую строчку:
Код:

extension=xdebug.so
Теперь рестартаните ваш веб-сервер, у меня это делается так:
Код:

service httpd restart
Как вариант:
Код:

service apache2 restart
Теперь посмотрите на phpinfo. Создайте файлик php и в нём напишите:
PHP код:

<?php phpinfo(); ?>

А теперь зайдите на него. Должно отобразить таблицу с различными параметрами php. Если вы найдёте там блок xdebug, то это значит, что установился он успешно. Теперь давайте настроим профилирование.

Открываем снова php.ini и добавляем строку:
Код:

xdebug.profiler_output_dir = "/var/log/xdebugprofiler"
Тут всё понятно: сюда будут высираться результаты профайлинга, чтобы мы могли их достать и проанализировать. Помните: папка должна быть writeable, чтобы дебаггер смог туда что-то написать. Также помните, что результаты профайлинга весят прилично (десятки мегабайт, а, при умелом говнокоде, могут весить и сотни), так что следите, чтобы там, куда будут их писать, было свободное место. Ещё целесообразно указывать папку, к которой у вас есть ftp-доступ, чтобы вы могли без проблем скачать результаты к себе на рабочую машину для анализа.

Далее надо активировать сам профайлинг. Вообще, есть такой параметр:
Код:

xdebug.profiler_enable
Он активирует профайлинг во ВСЕХ исполнениях php, если выставить на единицу. Но я не рикаминдую это делать, особенно на live-сервере: ВСЕ запросы ВСЕХ юзеров обработаются профайлером. А нам ведь чаще всего надо проанализировать исполнение конкретного сайта или даже страницы.

Вместо него в php.ini пишем вот это:

Код:

xdebug.profiler_enable_trigger = 1
Это строка активирует профайлер, но только по запросу.А запрос такой: в GET или POST-запросе нужно передать спец. параметр DEBUG_PROFILE. Это послужит сигналом к тому, чтобы профайлер стал собирать данные.

Ну, давайте приступим. Проще всего передать этот параметр через GET:
www.mysite.ru/test.php?XDEBUG_PROFILE.

После того, как страница сгенерируется, отправляйтесь в папку, указанную в xdebug.profiler_output_dir и забирайте оттуда только что созданный файл к себе на рабочую машину.

Далее вам понадобится программа для анализа, ведь отчёт не очень человекопонятен. Для Винды есть программа WinCacheGrind. Делаете File - Open на ваш отчёт и опа! Видно, вызов какой функции сколько времени занял.

Так вы сможете понять, где находится "bottle neck" и исправить его.

Не забудьте отключить профайлер после того, как всё сделаете, нехрен ему висеть включённым!
Код:

xdebug.profiler_enable_trigger = 0

moka 08.12.2012 06:00

Ответ: Профайлинг с помощью xdebug
 
Глянь кстати ещё New Relic. Говорят охрененная штука..

ABTOMAT 08.12.2012 06:29

Ответ: Профайлинг с помощью xdebug
 
Видел, в ролике много себя нахваливают в общих чертах, но никакой конкретики. Насторожило, что в ролике показано, что оно работает с PHP, Ruby, .NET и т.д. (вспомнили всё, на чём можно писать сайты), т.е. оно может в профилирование всего перечисленного? Указать пальцем на то, какая конкретно часть кода тормозит? Если нет, то, ну, скорость загрузки сайта я и сам могу знать, например. Т.е. конечно прикольно видеть это в виде графика, но всё же это не дебаггер.

moka 08.12.2012 19:00

Ответ: Профайлинг с помощью xdebug
 
Цитата:

Сообщение от ABTOMAT (Сообщение 246061)
Видел, в ролике много себя нахваливают в общих чертах, но никакой конкретики. Насторожило, что в ролике показано, что оно работает с PHP, Ruby, .NET и т.д. (вспомнили всё, на чём можно писать сайты), т.е. оно может в профилирование всего перечисленного? Указать пальцем на то, какая конкретно часть кода тормозит? Если нет, то, ну, скорость загрузки сайта я и сам могу знать, например. Т.е. конечно прикольно видеть это в виде графика, но всё же это не дебаггер.

Профилирование идёт вплоть до строки в коде и функций. Есть полный стёк, также детальные отчёты о ошибках в работе кода.


Часовой пояс GMT +4, время: 04:17.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot