Какой самый простой способ профилировать скрипт PHP?
Я бы хотел отметить что-то, что показывает мне дамп всех вызовов функций и сколько времени они заняли, но я также согласен с тем, чтобы что-то связывать с конкретными функциями.
Я попытался поэкспериментировать с функцией microtime :
$then = microtime();
myFunc();
$now = microtime();
echo sprintf("Elapsed: %f", $now-$then);
но это иногда дает мне отрицательные результаты. Кроме того, это большая проблема, чтобы посыпать это всем моим кодом.
microtime()
приведет иногда оценивающее выражение , как:"0.00154800 1342892546" - "0.99905700 1342892545"
, который будет оценивать , как:0.001548 - 0.999057
. Вы можете использовать,microtime( TRUE )
чтобы избежать этой проблемы, как указано @luka.Ответы:
Расширение PECL APD используется следующим образом:
После разбора созданного файла с помощью
pprofp
.Пример вывода:
Предупреждение: последний выпуск APD датирован 2004 годом, расширение больше не поддерживается и имеет различные проблемы с совместимостью (см. Комментарии).
источник
pecl install apd
он выдает сообщение об ошибке «config.m4». Похоже, вы должны установить его из источника, который я еще не пробовал. Серьезно, разве нет современного обновленного инструмента профилирования на основе CLI для PHP, который устанавливается с помощью Homebrew, требует минимальной настройки и дает легко читаемый вывод?Вы хотите xdebug, я думаю. Установите его на сервер, включите его, прокачайте вывод через kcachegrind (для linux) или wincachegrind (для windows), и он покажет вам несколько симпатичных диаграмм, которые детализируют точные тайминги, количество и использование памяти (но вы нужно другое расширение для этого).
Это качается, серьезно: D
источник
Расширения не нужны, просто используйте эти две функции для простого профилирования.
Вот пример, вызывающий prof_flag () с описанием в каждой контрольной точке и prof_print () в конце:
Вывод выглядит так:
Начало
0,004303
Подключение к БД
0,003518
Выполнить запрос
0,000308
Получить данные
0,000009
Закрыть БД
0,000049
Готово
источник
Перекрестная публикация моей ссылки из SO Documentation beta, которая выходит из сети.
Профилирование с помощью XDebug
Доступно расширение для PHP под названием Xdebug, которое поможет в профилировании PHP-приложений , а также в отладке во время выполнения. При запуске профилировщика выходные данные записываются в файл в двоичном формате с именем «cachegrind». Приложения доступны на каждой платформе для анализа этих файлов. Для выполнения этого профилирования не требуется никаких изменений кода приложения.
Чтобы включить профилирование, установите расширение и настройте параметры php.ini. Некоторые дистрибутивы Linux поставляются со стандартными пакетами (например,
php-xdebug
пакет Ubuntu ). В нашем примере мы запустим профиль по выбору на основе параметра запроса. Это позволяет нам сохранять настройки статичными и включать профилировщик только по мере необходимости.Затем используйте веб-клиент для запроса URL-адреса вашего приложения, который вы хотите профилировать, например,
По мере обработки страницы она будет записывать в файл с именем, аналогичным
По умолчанию номер в имени файла является идентификатором процесса, который его написал. Это настраивается с
xdebug.profiler_output_name
настройкой.Обратите внимание, что он будет записывать один файл для каждого выполняемого запроса / процесса PHP. Так, например, если вы хотите проанализировать публикацию формы, будет написан один профиль для запроса GET для отображения формы HTML. Параметр XDEBUG_PROFILE необходимо будет передать в последующий запрос POST для анализа второго запроса, который обрабатывает форму. Поэтому при профилировании иногда проще запустить curl для POST формы.
Анализируя вывод
После записи кеш профиля может быть прочитан таким приложением, как KCachegrind или Webgrind . PHPStorm, популярная PHP IDE, также может отображать эти данные профилирования .
KCachegrind, например, будет отображать информацию, включая:
Что искать
Очевидно, что настройка производительности очень специфична для каждого случая использования приложения. В общем, хорошо искать:
Примечание : Xdebug, и в особенности его функции профилирования, очень ресурсоемки и замедляют выполнение PHP. Рекомендуется не запускать их в рабочей среде сервера.
источник
Если вычитание микротрем дает отрицательные результаты, попробуйте использовать функцию с аргументом
true
(microtime(true)
). Сtrue
помощью функции возвращает число с плавающей точкой вместо строки (как это происходит, если она вызывается без аргументов).источник
Честно говоря, я собираюсь утверждать, что использование NewRelic для профилирования является лучшим.
Это расширение PHP, которое, похоже, совсем не замедляет время выполнения, и они делают мониторинг за вас, позволяя приличную детализацию. В дорогой версии они допускают тяжелую детализацию (но мы не можем позволить себе их модель ценообразования).
Тем не менее, даже с бесплатным / стандартным планом, это очевидно и просто, где большинство низко висящих фруктов. Мне также нравится, что это может дать вам представление о взаимодействиях с БД.
источник
Профилирование бедного человека, никаких расширений не требуется. Поддерживает вложенные профили и процент от общего:
Пример:
Урожайность:
источник
PECL XHPROF тоже выглядит интересно. Он имеет интерактивный HTML-интерфейс для просмотра отчетов и довольно простой документации . Я все еще должен проверить это все же.
источник
Мне нравится использовать phpDebug для профилирования. http://phpdebug.sourceforge.net/www/index.html
Он выводит все время / использование памяти для любого используемого SQL, а также всех включенных файлов. Очевидно, это лучше всего работает с абстрагированным кодом.
Для функции и класса профилирования я буду использовать
microtime()
+get_memory_usage()
+get_peak_memory_usage()
.источник
Я бы демонстративно дал попробовать BlackFire .
Есть этот VirtualBox, который я собрал, используя puphpet , для тестирования различных php-фреймворков, которые совместимы с BlackFire, пожалуйста, не стесняйтесь раскошелиться и / или распространять при необходимости :)
https://github.com/webit4me/PHPFrameworks
источник
Для бенчмаркинга, как в вашем примере, я использую пакет Pearl Benchmark . Вы устанавливаете маркеры для измерения. Класс также предоставляет несколько помощников для презентаций, или вы можете обрабатывать данные по своему усмотрению.
Я на самом деле обернул его в другом классе с помощью метода __destruct. Когда сценарий завершается, выходные данные записываются через log4php в системный журнал, поэтому у меня есть много данных о производительности для работы.
источник
XDebug нестабилен и не всегда доступен для конкретной версии php. Например, на некоторых серверах я все еще использую php-5.1.6 - это то, что поставляется с RedHat RHEL5 (а btw все еще получает обновления по всем важным вопросам), а недавний XDebug даже не компилируется с этим php. В итоге я переключился на отладчик DBG. Его тестирование php обеспечивает синхронизацию функций, методов, модулей и даже строк.
источник
Вы все должны обязательно проверить этот новый профилировщик php.
https://github.com/NoiseByNorthwest/php-spx
Он переопределяет способ сбора профилировщиков php и представляет результат. Вместо того, чтобы выводить только общее количество вызовов конкретной функции и общее время, потраченное на ее выполнение, PHP-SPX представляет всю временную шкалу выполнения запроса в удобочитаемой форме. Ниже приведен экран графического интерфейса, который он предоставляет.
источник