Intereting Posts
При попытке отправить форму в текстовое поле введите прессу с jquery ajax не работает Сеансы PHP – вопросы по блокировке и совместному использованию Как отправить электронную почту в записках лотоса с помощью PHP Обновление базы данных SQL с использованием значений флажка Как преобразовать массив в объект с помощью stdClass () Нужно нажимать самое темное пятно на изображении Передача пользовательских типов в PHP SOAP Paypal notify_url и return_url. Получение переменных без IPN с использованием PHP javascript backspace по умолчанию проблема … Возврат страницы Каковы веские причины использования статических методов в PHP? Сохранить пользовательские параметры в wp-plugin Получение PHP для запуска скрипта Python AES на стороне Java – расшифровка на стороне PHP и выбор одного ключа Загрузка php и jquery мгновенно загружает изображение и предварительный просмотр Codeigniter 2 в IIS с файлом web.config

Инструменты для визуального анализа использования памяти приложения PHP

Есть ли что-то бесплатное или коммерческое, которое может облегчить анализ использования памяти приложением PHP? Я знаю, что xdebug может создавать файлы трассировки, которые показывают использование памяти вызовом функции, но без графического инструмента данные трудно интерпретировать.

В идеале я хотел бы иметь возможность просматривать не только общее использование памяти, но и то, какие объекты находятся в куче, и кто ссылается на них подобно Jprofiler .

Solutions Collecting From Web of "Инструменты для визуального анализа использования памяти приложения 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 для настройки своей виртуальной машины, вы будете рады узнать, что она поддерживается 😉

Недавно я столкнулся с той же проблемой, но не смог найти каких-либо конкретных инструментов.

Но что-то, что помогло, было вывести трассировку xdebug в человекообразном формате с включенными mem deltas (параметр INI, xdebug.show_mem_deltas или что-то, что я думаю?). Затем выполните сортировку (если вы на * nix) на выходе:

 sort -bgrk 3 -o sorted.txt mytracefile.xt 

Это похоже на третий col, дельт del mem. Вы также можете отсортировать второй столбец, и в этом случае вы можете найти строку, в которой ваше приложение использует больше всего памяти.

Конечно, это не может обнаружить, когда использование памяти объекта только ползучее с небольшим шагом, но заканчивается тем, что использует большую часть памяти в целом. У меня довольно глупый метод, который пытается сделать это, используя комбинацию итерации объектов и сериализации. Скорее всего, это не означает, что использование памяти явно не соответствует действительности, но, надеюсь, дает представление о том, с чего начать искать. Имейте в виду, что он будет использовать память самого себя, а также не был тщательно протестирован, поэтому покупатель остерегается:

 function analyzeMem($obj, $deep=false) { if (!is_scalar($obj)) { $usage = array('Total'=>strlen(serialize($obj))); while (list($prop, $propVal) = each($obj)) { if ($deep && (is_object($propVal) || is_array($propVal))) { $usage['Children'][$prop] = analyzeMem($propVal); } else { $usage['Children'][$prop] = strlen(serialize($propVal)); } } return $usage; } else { return strlen(serialize($obj)); } } print_r(analyzeMem(get_defined_vars())); 

Кроме того, только что предложил этот метод со стороны коллеги (приветствует Денниса 😉 Это скрывает шаги, которые ниже двух уровней отступов, вы можете легко увидеть точки, в которых скапливается общее использование памяти, и может сузить все, увеличивая отступы:

 egrep '[0-9]+ ( ){1,2}-> ' mytracefile.xt 

На http://www.xdebug.org/updates.php для Xdebug 2.0.4 они пишут в разделе «Удаленные функции»: «… Удалена поддержка профилирования памяти, поскольку это не работает должным образом …». Следовательно, xdebug не будет вариантом

Графическим инструментом для вывода xdebug является KCacheGrind .

Попробуйте webgrind . Он дает вам профилирование CacheGrinder в удобном для чтения формате на основе браузера. Я нахожусь на Mac, и он сделал профилирование легким ветром.

phpDesigner 2008 может отлаживать и тестировать веб-сайты с помощью xdebug и KCacheGrind. Он также имеет встроенный монитор.