Какой хороший способ профилировать использование памяти PHP-страницей? Например, чтобы узнать, сколько памяти используют мои данные и / или какие вызовы функций выделяют больше всего памяти.
xdebug, похоже, не предоставляет информацию о памяти в своей функции профилирования.
Xdebug делает предоставить его в отслеживании функции. Это довольно близко к тому, что я хочу, за исключением огромного количества данных, поскольку он показывает дельты памяти для каждого отдельного вызова функции. Если бы можно было скрыть вызовы ниже определенной глубины, возможно, с помощью какого-нибудь инструмента с графическим интерфейсом, это решило бы мою проблему.
Есть ли еще что-нибудь?
Ответы:
Xdebug переопределил трассировку памяти в 2.6 (2018-01-29), которую можно использовать в Qcachegrind или аналогичном инструменте. Только не забудьте выбрать опцию памяти :)
Из документов:
Я не знаком с форматом файла, но Qcachegrind отлично поработал для меня при отслеживании пары проблем с памятью.
источник
Как вы, наверное, знаете, 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 gperftools , загрузив последний пакет здесь: https://code.google.com/p/gperftools/
Потом как всегда:
Теперь в вашем коде:
memprof_enable(); // do your magic memprof_dump_pprof(fopen("/tmp/profile.heap", "w"));
Затем откройте свой терминал и запустите:
pprof создаст новое окно в вашем существующем сеансе браузера, как показано ниже:
Xhprof + Xhgui (лучший, на мой взгляд, для профилирования процессора и памяти)
С помощью Xhprof и Xhgui вы также можете профилировать использование процессора или только использование памяти, если это ваша проблема на данный момент. Это очень полные решения, они дают вам полный контроль, а журналы могут быть записаны как на mongo, так и в файловой системе.
Подробнее см. Мой ответ здесь .
Черный огонь
Blackfire - это профилировщик PHP от SensioLabs, ребята из Symfony2 https://blackfire.io/
Если вы используете puphpet для настройки своей виртуальной машины, вы будете рады узнать, что она поддерживается ;-)
источник
memprof_enable
свой PHP-код и получилPHP Fatal error: Uncaught Error: Call to undefined function memprof_enable()
. Я сделал gperftools для установки из текущего исходного кода.php -i
команду a на cli или a,phpinfo()
чтобы проверить, правильно ли загружается расширение. Если у вас его там нет, возможно, стоит взглянуть на ваши*.ini
файлы.sudo pecl install memprof-1.0.0
.Что ж, возможно, это не совсем то, что вы ищете, но в PHP есть несколько встроенных функций, которые выводят данные об использовании памяти. Если вы просто хотите узнать, сколько памяти использует вызов функции, вы можете использовать memory_get_peak_usage () до и после вызова и учесть разницу.
Вы используете ту же технику для ваших данных, используя очень похожую memory_get_usage () .
Довольно простой подход, но это быстрый способ проверить кусок кода. Я согласен с тем, что дельты памяти xdebug иногда могут быть слишком подробными, чтобы быть полезными, поэтому я часто просто использую их, чтобы сузить область кода, а затем вручную выгрузить конкретное использование памяти для небольших фрагментов.
источник
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 ) {
Не забудьте изменить этот файл на 755.
Вы можете легко создать сценарий ruby watchr для автоматического вызова сценария каждый раз, когда он создает файл профиля памяти (* .xt). Таким образом, вы могли продолжать тестирование и видеть свои улучшения без необходимости повторять команду снова и снова.
источник