Использование памяти в очень большой функции [дубликат]

Не трогайте командлеты PowerShell для этого, просто используйте robocopy:

robocopy C:\temp\sourcedirectory C:\temp\targetdirectory *.txt /s
79
задан JW. 23 August 2009 в 16:54
поделиться

4 ответа

Xdebug переопределяет трассировку памяти в 2.6 (2018-01-29), которая может использоваться в Qcachegrind или аналогичном инструменте. Просто обязательно выберите опцию памяти :)

Из документов:

Начиная с Xdebug 2.6, профилировщик также собирает информацию о том, сколько используется память, а функции aGnd увеличивают использование памяти.

Я не знаком с форматом файла, но Qcachegrind отлично поработал для отслеживания пары памяти вопросы.

4
ответ дан SeanDowney 24 August 2018 в 00:52
поделиться

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). Таким образом, вы можете продолжать тестирование и видеть свои улучшения без необходимости повторять команду снова.

0
ответ дан 2upmedia 24 August 2018 в 00:52
поделиться

Как вы, наверное, знаете, 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 (рекомендуется!) [/ ​​G8 ]

Прежде всего установите ggftools Google, загрузив последний пакет здесь: 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 memory profiling with memprof and gperftools [/g11]

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

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

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

Blackfire

Blackfire - это профилировщик PHP SensioLabs, ребята Symfony2 https://blackfire.io/

Если вы используете puphpet , чтобы настроить свою виртуальную машину, вы будете рады узнать, что она поддерживается; -)

62
ответ дан Community 24 August 2018 в 00:52
поделиться
  • 1
    Спасибо за информацию о gperftools - работает. – Ezekiel Victor 9 May 2016 в 19:24
  • 2
    Как вы заставили его работать? Я попытался поместить memprof_enable в свой PHP-код, и я получаю PHP Fatal error: Uncaught Error: Call to undefined function memprof_enable(). Я сделал gperftools make install из исходного исходного кода. – Andrey Pokhilko 28 September 2016 в 16:28
  • 3
    Запустите php -i в cli или phpinfo(), чтобы убедиться, что вы правильно загрузили расширение. Если у вас его нет, возможно, стоит взглянуть на ваши файлы *.ini. – Francesco Casula 28 September 2016 в 16:57
  • 4
    Примечание. Последняя версия поддерживает только php7. Если вы используете php5, установите с помощью sudo pecl install memprof-1.0.0. – Djizeus 18 May 2017 в 13:31

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

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

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

16
ответ дан zombat 24 August 2018 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: