Каков хороший способ профилировать использование памяти PHP-страницы? Например, чтобы узнать, сколько памяти использует мои данные, и / или какие вызовы функций выделяют большую часть памяти.
xdebug, похоже, не предоставляет информацию о памяти в своей функции профилирования.
xdebug предоставляет его в своей функции трассировки. Это очень близко к тому, что я хочу, за исключением того, что огромное количество данных является подавляющим, поскольку оно отображает дельта памяти для каждого вызова функции. Если бы можно было скрывать вызовы ниже определенной глубины, возможно, с помощью некоторого инструмента GUI, который бы разрешил мою проблему.
Есть ли еще что-нибудь?
Как вы, вероятно, знаете, 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 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 создаст новое окно в вашем существующем сеансе браузера, как показано ниже:
С 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). Таким образом, вы можете продолжить тестирование и увидеть свои улучшения, не выполняя команду снова и снова.