Перекрестная публикация моей ссылки из бета-версии SO Documentation, которая выходит из сети.
Профилирование с помощью XDebug
Доступно расширение к PHP, называемое Xdebug, для помощи в профилировании приложений PHP , а также отладке во время выполнения. При запуске профилировщика выходные данные записываются в файл в двоичном формате с именем «cachegrind». Приложения доступны на каждой платформе для анализа этих файлов. Для выполнения этого профилирования не требуется никаких изменений кода приложения.
Чтобы включить профилирование, установите расширение и настройте параметры php.ini. Некоторые дистрибутивы Linux поставляются со стандартными пакетами (например, пакет Ubuntu php-xdebug
). В нашем примере мы запустим профиль по выбору на основе параметра запроса. Это позволяет нам сохранять статические настройки и включать профилировщик только при необходимости.
# php.ini settings
# Set to 1 to turn it on for every request
xdebug.profiler_enable = 0
# Let's use a GET/POST parameter to turn on the profiler
xdebug.profiler_enable_trigger = 1
# The GET/POST value we will pass; empty for any value
xdebug.profiler_enable_trigger_value = ""
# Output cachegrind files to /tmp so our system cleans them up later
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%p"
Затем используйте веб-клиент для запроса URL-адреса вашего приложения, которое вы хотите профилировать, например,
http://example.com/article/1?XDEBUG_PROFILE=1
По мере обработки страницы она будет записывать в файл с именем, аналогичным
/tmp/cachegrind.out.12345
По умолчанию номер в имени файла является идентификатором процесса, который его написал. Это можно настроить с помощью параметра xdebug.profiler_output_name
.
Обратите внимание, что он будет записывать один файл для каждого выполняемого запроса / процесса PHP. Так, например, если вы хотите проанализировать сообщение формы, будет написан один профиль для запроса GET для отображения формы HTML. Параметр XDEBUG_PROFILE необходимо будет передать в последующий запрос POST для анализа второго запроса, который обрабатывает форму. Поэтому при профилировании иногда проще запустить curl для POST-формы напрямую.
Анализ выходных данных
После записи кеш профиля может быть прочитан таким приложением, как KCachegrind или Webgrind . PHPStorm, популярная PHP IDE, также может отображать эти данные профилирования .
KCachegrind, например, отобразит информацию, в том числе:
- Выполненные функции
- Время вызова, как само, так и включая последующие вызовы функций
- Количество раз, когда каждая функция вызывается
- Графики вызовов
- Ссылки на исходный код
Что искать
Очевидно, что настройка производительности очень специфична для сценариев использования каждого приложения. В общем, хорошо искать:
- Повторные вызовы той же функции, которую вы не ожидаете увидеть. Для функций, которые обрабатывают и запрашивают данные, это может быть основной возможностью для вашего приложения для кэширования.
- Медленные функции. Где приложение тратит большую часть своего времени? Наилучшая выгода при настройке производительности сосредоточена на тех частях приложения, которые занимают больше всего времени.
Примечание : Xdebug и, в частности, его функции профилирования, очень ресурсоемки и замедляют выполнение PHP. Рекомендуется не запускать их в среде производственного сервера.