2010-05-27 3 views
14

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

+0

Пожалуйста, укажите, если вы хотите, чтобы проверить блок PHP кода, блок кода, который использует базу данных или общую производительность вашего сайт под нагрузкой. Все три варианта использования имеют свои собственные инструменты, что отражено в ответах здесь. – chiborg

+0

Вот [отличный ответ] (http://stackoverflow.com/a/1202746/4233593) –

ответ

6

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

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

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

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

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

НТН

C.

+1

Очень красиво, трудно измерить, как ваше приложение может работать под большой нагрузкой. Вы можете использовать Selenium вместо Mechanize для автоматизации браузеров, но насколько я знаю, он не предназначен для тестирования нагрузки. –

+0

Зачем упоминать hp loadrunner, но не apache jmeter? –

6

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

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

time() возвращает секунды, а не миллисекунды. Я считаю, что вы ищете что-то вроде [microtime()] (http://ca3.php.net/manual/en/function.microtime.php) –

+3

Я всегда получаю отрицательные числа, делая это. Является ли моя программа быстрее самого времени? – Ray

+0

@ Раймонд: вы, возможно, доказали возможность перемещения частиц быстрее света :) – Thariama

11

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

4

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

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

2

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

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

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

0

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

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

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

Смежные вопросы