Перекрестная публикация моей ссылки из SO Documentation beta, которая выходит из сети.
Профилирование с помощью XDebug
Доступно расширение для PHP под названием Xdebug, которое поможет в профилировании PHP-приложений , а также в отладке во время выполнения. При запуске профилировщика выходные данные записываются в файл в двоичном формате с именем «cachegrind». Приложения доступны на каждой платформе для анализа этих файлов. Для выполнения этого профилирования не требуется никаких изменений кода приложения.
Чтобы включить профилирование, установите расширение и настройте параметры php.ini. Некоторые дистрибутивы Linux поставляются со стандартными пакетами (например, php-xdebug
пакет Ubuntu ). В нашем примере мы запустим профиль по выбору на основе параметра запроса. Это позволяет нам сохранять настройки статичными и включать профилировщик только по мере необходимости.
# 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. Рекомендуется не запускать их в рабочей среде сервера.