Профилирование сайтов на PHP

Хороший сайт должен быть не только красивым и удобным, но и быстрым. Если ваш сайт стал работать медленнее, но причин такого поведения быстро найти не удается - помочь определить проблемы в его коде сможет профилировщик.

Что такое профилировщик?

Профилировщик (или профайлер, от английского profiler) - это специальное программное обеспечение, которое дает возможность оценить:

  • где именно;
  • на какие операции;
  • в каких объемах

тратятся ресурсы при выполнении скриптов. Эта информация полезна разработчикам, которые с ее помощью могут оптимизировать работу своих программ, уменьшить использование аппаратных ресурсов и сократить время работы скриптов.

Данные, которые собирает профилировщик, могут быть разными: количество использованной во время выполнения скрипта памяти, частота и продолжительность вызовов функций, время ответа на конкретный запрос и так далее.

Для проектов, написанных на PHP, наибольшей популярностью пользуются профилировщики XHProf, разработанный Facebook, и Tideways - бесплатные решения с открытым исходным кодом, которые можно использовать на нашем хостинге: мы сделали простую установку профилировщика и интерфейса для работы с ним прямо из Панели управления, чтобы нашим пользователям не приходилось тратить время и силы на его подключение.

Как установить профилировщик на сайт?

Установить профилировщик на сайт можно из раздела "Сайты" Панели управления: напротив доменного имени, прилинкованного к нужному сайту, кликните по иконке  "Управление профилировщиком".

В открывшемся окне будет доступна справочная информация о том, какие действия необходимо будет предпринять после включения профилировщика для генерации отчета, а также кнопка "Включить".

По нажатию кнопки "Включить" запустится установка профилировщика и графического интерфейса для просмотра результатов профилирования. Профилировщик будет включен для сайта практически мгновенно, для установки интерфейса понадобится некоторое время: текущий статус установки будет отображаться в окне состояния профилировщика.

После завершения установки интерфейса в Панели управления появится соответствующее уведомление, а в окне настроек будут доступны логин и пароль для доступа к нему. Если Вы по какой-то причине удалили или изменили файлы графического интерфейса профилировщика - из этого же окна можно одним кликом восстановить данные для его корректной работы.

Как использовать профилировщик?

При включении профилировщик генерирует отчеты о работе вашего сайта, когда вы открываете его страницы. Каждую страницу сайта, для которой необходим отчет, вам нужно открыть самостоятельно: профилировщик запускается только для вашего IP-адреса. Посещения сайта другими пользователями не запускают профилирование, отчеты в таком случае создаваться не будут.

После генерации отчетов они будут доступны в интерфейсе - ссылка на него доступна в окне управления профилировщиком.

Главное окно

В главном окне интерфейса можно выбрать количество последних запросов, для которых собрана статистика, а также включить фильтр результатов по нескольким критериям: посещаемости страницы, нагрузки на CPU, используемой памяти и времени выполнения.

Если профилировщик включен для нескольких сайтов - в выпадающем списке можно выбрать конкретный домен, для которого нужно отобразить результаты.

Для каждого отчета в таблице выводится информация о времени выполнения скрипта (в микросекундах), процессорному времени и пиковом потреблении памяти (в байтах). По клику по дате отчета откроется подробная информация о результатах профилирования.

Отчет о результатах

Каждый отчет профилировщика состоит из нескольких частей:

  • общая информация о результатах профилирования - статистика общего выполнения скрипта, информация о Cookie и параметрах GET- и POST-запросов;
  • подробная информация о результатах профилирования - статистика по каждой вызываемой скриптом функции;
  • граф вызовов функций - визуальное отображение связи функций, выполняемых скриптом.

Общая информация об отчете

Первая часть отчета содержит общую информацию о работе скрипта, для которого запускалось профилирование. Если профилирование для скрипта запускалось несколько раз - интерфейс отобразит это: соответствующие счетчики будут отображены в графе "Точный URL" (в случае, когда отчеты собирались при посещении одной и той же страницы сайта) и "Похожие URL" (когда есть результаты профилирования страниц, адрес которых похож на адрес из текущего отчета).

Интерфейс отображает следующие данные статистики:

  • Время выполнения скрипта (в микросекундах);
  • Процессорное время, потраченное на работу скрипта (в микросекундах);
  • Потребление памяти во время выполнения (в байтах);
  • Количество вызовов функций внутри скрипта.

Также предоставляются следующие данные (при их наличии):

  • информация о Cookie;
  • информация о GET- и POST-запросах.

В общую информацию включена и диаграмма распределения функций, вызываемых в скрипте, по времени их выполнения: при наведении на сектор диаграммы отобразится название функции и потраченное на ее выполнение время.

Подробная информация об отчете (таблица)

В таблице подробной информации отображается статистика по каждой функции, вызванной в ходе работы скрипта. Цвет ячейки в колонке "Группа" соответствует цвету сектора на диаграмме распределения функций по времени выполнения - это позволяет быстро найти функцию, которая выполнялась дольше всего, не изменяя сортировку таблицы.

Таблица отображает следующие данные статистики:

  • Количество вызовов функции за время работы скрипта;
  • Время в микросекундах, потраченное на выполнение функции (как с учетом выполнения других функций внутри, так и без);
  • Процессорное время в микросекундах, использованное на выполнение функции (как с учетом выполнения дочерних функций, так и без)
  • Среднее и пиковое потребление памяти в байтах (также с учетом и без учета дочерних функций).

По клику на имя функции откроется расширенная статистика ее профилирования.

В расширенной статистике доступна информация как о самой функции, так и о родительских (тех функциях, которые в ходе своей работы вызывали исследуемую нами) и дочерних (тех функциях, которые вызывала исследуемая нами функция). Статистика собирается по следующим данным:

  • количеству вызовов;
  • времени выполнения в микросекундах;
  • процессорному времени в микросекундах;
  • потреблению памяти в байтах (как среднему, так и пиковому).

Граф вызовов

Интерфейс позволяет построить визуальное отображение вызовов всех функций во время работы скрипта - граф вызовов. Просмотреть его можно, кликнув по соответствующей ссылке в собранном отчете. Цветом в графе вызовов выделены функции, время выполнения которых было наибольшим, рядом со связью родительской и дочерней функции отображается количество вызовов. 

Заключение

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

38
4045