Тест производительности PHP-кода

Каков наилучший способ проверить производительность моего PHP-кода?

Ответы

Ответ 1

xDEBUG (см. ответ Нила Айткена) полезен для определения проблем с низкой производительностью в PHP-коде, но его можно использовать только в очень контролируемых и ограничительных условиях - не в последнюю очередь его трудно понять, какое влияние оказывает на производительность.

Пока, как предлагает Патрик МАРИ, вы можете использовать ab - это не жизнеспособный подход, если транзакция, которую вы пытаетесь измерить, охватывает больше, чем страницу (например, вход в приложение и создание сеанса, добавление случайного продукта в корзину, повтор добавления случайное произведение N раз...).

AFAIK там нет PHP-решения для взаимодействия с записью/скриптингом, но есть Perl + WWW: Mechanize + HTTP: recorder. Или, если вы очень богаты, вы можете купить продукт с загрузкой HP.

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

... и даже тогда время, затрачиваемое PHP на создание HTML-страницы, является лишь очень небольшой частью истории того, сколько времени требуется для отображения страницы в браузере.

НТН

С.

Ответ 2

Вы должны использовать ab (инструмент тестирования apache) для запуска большого количества запросов и xhprof, чтобы профилировать/анализировать ваш код. По моему мнению, это всего лишь основы, но дают отличные результаты.

Ответ 3

Вы можете использовать microtime(), чтобы избавиться от времени выполнения вашего кода. Вот базовый фрагмент кода для этого:

$start_timestamp = microtime(true);
...
---your Code---
...
$end_timestamp = microtime(true);
$duration = $end_timestamp - $start_timestamp;
error_log("Execution took ".$duration." milliseconds.");

Ответ 4

xDebug имеет встроенный профайлер, после его настройки будут удалены некоторые файлы, которые вы можете прочитать с помощью программы, такой как kCacheGrind или WinCacheGrind

Затем вы сможете увидеть все вызовы функций, среднее и кумулятивное время вызова и общее время выполнения script. Очень полезно для поиска узких мест в вашем коде.

Ответ 5

Если вы хотите протестировать определенную часть кода, рассмотрите возможность использования пакета Benchmark из библиотеки PHP PEAR.

$timer = new Benchmark_Timer();
$timer->start();
// Code to test here
$timer->stop();
$timer->display();

Ответ 6

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

Ответ 7

Также вы можете использовать APD (Advanced PHP Debugger).

Это очень легко заставить работать.

Есть хороший учебник, как компилировать APD и делать с ним профилирование: http://martinsikora.com/compiling-apd-for-php-54