Я хочу знать использование памяти моего приложения Python и особенно хочу знать, какие блоки / части кода или объекты потребляют больше всего памяти. Поиск Google показывает коммерческий Python Memory Validator (только для Windows).
И с открытым исходным кодом PySizer и Heapy .
Я никого не пробовал, поэтому хотел узнать, какой из них лучший, учитывая:
Дает большинство деталей.
Я должен сделать минимум или без изменений в моем коде.
python
performance
memory-management
profiling
Анураг Униял
источник
источник
Ответы:
Heapy довольно прост в использовании. В какой-то момент в вашем коде вы должны написать следующее:
Это дает вам некоторый вывод, как это:
Вы также можете узнать, откуда ссылаются объекты, и получить статистику об этом, но каким-то образом документы по этому вопросу немного скудны.
Также есть графический браузер, написанный на Tk.
источник
pip install https://guppy-pe.svn.sourceforge.net/svnroot/guppy-pe/trunk/guppy
boost::python
объекты, то было бы неплохо увидеть некоторые примеры!Поскольку никто не упомянул об этом, я укажу на мой модуль memory_profiler который способен печатать построчный отчет об использовании памяти и работает в Unix и Windows (для этого нужен psutil). Вывод не очень подробный, но цель - дать вам представление о том, где код потребляет больше памяти, а не исчерпывающий анализ выделенных объектов.
После того, как вы украсите свою функцию
@profile
и запустите код с-m memory_profiler
флагом, он напечатает построчный отчет, например:источник
memory_profiler
свой вывод? Возможно, я что-то делаю не так, но кажется, что вместо завершения вывода профиля для функции, когда она завершается, он ожидает завершения сценария.Я рекомендую Доусер . Это очень легко установить, и вам нужно ноль изменений в вашем коде. Вы можете просматривать количество объектов каждого типа во времени, просматривать список живых объектов, просматривать ссылки на живые объекты, все из простого веб-интерфейса.
Вы импортируете memdebug и вызываете memdebug.start. Это все.
Я не пробовал PySizer или Heapy. Буду признателен за отзывы других.
ОБНОВИТЬ
Выше код для
CherryPy 2.X
, метод был удален и не принимает флаг. Так что если вы используетеCherryPy 3.X
server.quickstart
engine.start
blocking
CherryPy 3.X
источник
Рассмотрим библиотеку objgraph (см.http://www.lshift.net/blog/2008/11/14/tracing-python-memory-leaks для примера использования).
источник
objgraph.by_type('dict')
понять, откуда взялись все эти неожиданныеdict
объекты.Muppy - это (еще один) памяти для Python. Основное внимание в этом наборе инструментов уделяется выявлению утечек памяти.
Маппи пытается помочь разработчикам идентифицировать утечки памяти приложений Python. Это позволяет отслеживать использование памяти во время выполнения и идентифицировать объекты, которые протекают. Кроме того, предусмотрены инструменты, позволяющие определить местонахождение не выпущенных объектов.
источник
Я разрабатываю профилировщик памяти для Python под названием memprof:
http://jmdana.github.io/memprof/
Это позволяет вам регистрировать и отображать использование памяти ваших переменных во время выполнения декорированных методов. Вам просто нужно импортировать библиотеку, используя:
И украсьте свой метод, используя:
Это пример того, как выглядят графики:
Проект размещен на GitHub:
https://github.com/jmdana/memprof
источник
a
,b
иc
имена переменных. Вы можете найти документацию по адресу github.com/jmdana/memprof . Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь отправлять сообщения в github или отправлять электронную почту в список рассылки, который можно найти в документации.Я обнаружил, что meliae гораздо более функциональна, чем Heapy или PySizer. Если вы работаете с веб-приложением wsgi, то Dozer - это прекрасная промежуточная оболочка Dowser.
источник
Попробуйте также проект pytracemalloc, который обеспечивает использование памяти на номер строки Python.
РЕДАКТИРОВАТЬ (2014/04): теперь он имеет графический интерфейс Qt для анализа снимков.
источник
tracemalloc
теперь является частью стандартной библиотеки Python. См. Docs.python.org/3/library/tracemalloc.html