процессы python увеличивают использование памяти день ото дня - PullRequest
4 голосов
/ 21 февраля 2011

Сценарий:

У меня есть процесс python, который работает непрерывно (до тех пор, пока мы не остановимся вручную - бесконечно) и собирает данные, читая определенные системные файлы каждую 1 минуту. Когда он запускается, он занимает около 25 МБ. Но с каждым днем ​​объем занятой памяти увеличивается, и через 15 дней он превышает 500 МБ.

  • Я новичок в Python, поэтому не могу выяснить проблему, перебирая код вручную / используя отладчик,
  • Мне неизвестен какой-либо инструмент, который может легко определить проблему, пожалуйста, предложите какой-нибудь инструмент или метод, который может помочь мне определить проблему.
  • Я предполагаю, что это может быть проблема утечки памяти или переменная, которая добавляет данные к нему снова и снова, а вовсе не освобождает их ... Пожалуйста, укажите мне некоторые ссылки, которые могут помочь мне в понимании подобных проблем в питоне.

Надеюсь, что детали достаточно ясны, для более подробной информации, дайте мне знать, я могу уточнить.

Обновление

Я пытался подписаться на эту тему Отображение трассировки стека из работающего приложения Python , но я сталкиваюсь со следующими ошибками, которые не удается полностью устранить.

  • В текущем контексте нет символа "PyEval_EvalFrameEx".
  • В текущем контексте нет символа "PyStringObject".

Я искал, чтобы найти такой метод, подключиться к уже запущенному процессу и получить информацию о стеке / памяти. Но пока не повезло, пожалуйста, помогите мне.

Ответы [ 3 ]

3 голосов
/ 21 февраля 2011

используйте Dowser , чтобы помочь отслеживать утечки памяти.Он использует CherryPy в качестве веб-сервера и даже если вы не разрабатываете веб-приложение, он может предоставить вам представление о выделении памяти из вашего браузера.

См. Также этот пост ,который вы можете найти интерес.С помощью Dowser вы сможете увидеть, какие неожиданные объекты находятся в вашей памяти процесса.

1 голос
/ 14 декабря 2011

Это хорошо известная проблема, которая проявляется в давно работающих процессах python. Улучшения были сделаны, но не полностью решили проблему. Например, Python использует свой собственный алгоритм управления памятью, который может привести к фрагментации его собственной кучи. Лучшая стратегия состоит в том, чтобы запустить несколько процессов и корректно перезапустить, когда каждый из них достигнет отметки уровня воды. Apache также использует эту стратегию.

0 голосов
/ 21 февраля 2011

В целом: у Python есть проблемы с управлением памятью - особенно с освобождением памяти. Регулярный перезапуск приложений - обычная практика. Кроме того, изучите использование сборщика мусора 'gc' и ознакомьтесь с темами типа

Как мне профилировать использование памяти в Python?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...