Перехресне розміщення моєї посилання з бета-документації SO Documentation, яка переходить в офлайн.
Профілювання за допомогою 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. Рекомендується не запускати їх у виробничому сервері.