Профилирование памяти PHP

Каков хороший способ профилировать использование памяти PHP-страницы? Например, чтобы узнать, сколько памяти использует мои данные, и / или какие вызовы функций выделяют большую часть памяти.

Есть ли еще что-нибудь?

Как вы, вероятно, знаете, Xdebug отказался от поддержки профилирования памяти с версии 2. *. Пожалуйста, найдите строку «удаленные функции» здесь: http://www.xdebug.org/updates.php

Удаленные функции

Удалена поддержка профилирования памяти, так как это не работает должным образом.

Поэтому я попробовал другой инструмент, и он работал хорошо для меня.

https://github.com/arnaud-lb/php-memory-profiler

Это то, что я сделал на своем сервере Ubuntu, чтобы включить его:

sudo apt-get install libjudy-dev libjudydebian1 sudo pecl install memprof echo "extension=memprof.so" > /etc/php5/mods-available/memprof.ini sudo php5enmod memprof service apache2 restart 

И затем в моем коде:

 <?php memprof_enable(); // do your stuff memprof_dump_callgrind(fopen("/tmp/callgrind.out", "w")); 

Наконец, откройте файл callgrind.out с помощью KCachegrind

Использование Google gperftools (рекомендуется!)

Прежде всего установите Google gftftools , загрузив последний пакет здесь: https://code.google.com/p/gperftools/

Затем, как всегда:

 sudo apt-get update sudo apt-get install libunwind-dev -y ./configure make make install 

Теперь в вашем коде:

 memprof_enable(); // do your magic memprof_dump_pprof(fopen("/tmp/profile.heap", "w")); 

Затем откройте терминал и запустите:

 pprof --web /tmp/profile.heap 

pprof создаст новое окно в вашем существующем сеансе браузера, как показано ниже:

Профилирование памяти PHP с помощью memprof и gperftools

Xhprof + Xhgui (лучший, на мой взгляд, профиль как процессора, так и памяти)

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

Подробнее см. Мой ответ здесь .

Черный огонь

Blackfire является профилировщиком PHP от SensioLabs, парней Symfony2 https://blackfire.io/

Если вы используете puphpet для настройки своей виртуальной машины, вы будете рады узнать, что она поддерживается 😉

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

Вы используете ту же технику вокруг своих данных, используя очень похожее memory_get_usage () .

Довольно простой подход, но это быстрый способ проверить часть кода. Я согласен с тем, что xdebug mem deltas может быть слишком многословным, чтобы быть полезным иногда, поэтому я часто просто использую его, чтобы сузить до раздела кода, а затем выгрузить конкретное использование памяти для небольших частей вручную.

http://geek.michaelgrace.org/2012/04/tracing-php-memory-usage-using-xdebug-and-mamp-on-mac/

Я нахожусь на Mac, поэтому, если вы в Windows, вам придется протестировать это, но это работает для меня.

Я изменил файл tracefile-analyzer.php и добавил путь к двоичному файлу PHP сверху, чтобы вы могли называть его в терминале как обычный скрипт unix.

 #!/Applications/MAMP/bin/php5.3/bin/php <?php if ( $argc <= 1 || $argc > 4 ) { 

Не забудьте сделать chmod этот файл до 755.

Вы можете легко создать скрипт ruby ​​watchr, чтобы автоматически вызывать скрипт каждый раз, когда он создает файл профиля памяти (* .xt). Таким образом, вы можете продолжить тестирование и увидеть свои улучшения, не выполняя команду снова и снова.