Ответ 1
Я искал утечку памяти (которая находилась во внешней библиотеке C), используя muppy - отличный инструмент, я бы хотел, чтобы я нашел это скорее! Спасибо всем за ответы.
У меня есть приложение multiprocessing
, которое утечки памяти. Однако утечка не входит в основной процесс (согласно Dowser и top
), но в подпроцессах. Можно ли использовать Dowser (или аналогичный инструмент) для подпроцессов для отслеживания утечки? Если нет, как его отслеживать?
UPDATE: я потратил много времени на использование heapy и код gnibbler, но я не смог найти утечку. Затем я остановил черри в основном процессе и начал еще один (с Dowser) в подпроцессе. Но через несколько минут CherryPy перестанет слушать порт...:( Так что я все еще ищу лучшую идею.
Я искал утечку памяти (которая находилась во внешней библиотеке C), используя muppy - отличный инструмент, я бы хотел, чтобы я нашел это скорее! Спасибо всем за ответы.
Я нашел memory_profiler очень прост в использовании, но я не уверен, как он взаимодействует с многопроцессорностью, поскольку я никогда не использовал этот модуль. См. Этот ответ для краткого объяснения и других ответов в этой теме, чтобы упомянуть другие профилировщики Python.
Я нашел пару сообщений, которые должны оказаться весьма полезными. Не успел переварить всю информацию в них, но подумал, что я разместил ссылки и позволяю вам также взглянуть на них.
У Marius Gedminas есть два сообщения об охоте memleaks в наборе тестов Python. Он использует встроенные модули gc
и inspect
и просто сбрасывает графы объектов на диск как файлы csv, поэтому подход должен работать достаточно хорошо даже для приложений mp
.
Я рассмотрю, что я сам позже, когда я получаю время.
UPDATE
Marius выпустил свою тестовую установку как проект с открытым исходным кодом под названием objgraph
(ссылка). Он отслеживает ссылки на объекты gc
, но позволяет распечатывать полезную информацию, например количество экземпляров того типа, которые были добавлены после вызова функции, и позволяет видеть полные цепочки ссылок для объектов.
Документы довольно понятны, и я не вижу причин, по которым он не будет работать с приложениями mp
.
Однако, если утечка памяти происходит из некоторой базовой библиотеки c, это может вам не помочь. По крайней мере, это должно дать вам представление о утечке. Если окажется, что вы не находитесь в вашем коде на python, вам может понадобиться реорганизовать ваш код, чтобы вы могли запускать соответствующие c-библиотеки в основном процессе и использовать что-то вроде Valgrind, чтобы обнаружить утечку.
Оригинальное сообщение http://mg.pov.lt/blog/hunting-python-memleaks.html
Тот, где он больше использует инструменты, которые он использует http://mg.pov.lt/blog/python-object-graphs.html
Сообщение, которое меня запустило http://www.lshift.net/blog/2008/11/14/tracing-python-memory-leaks