Python Daemon Process Memory Management - PullRequest
       16

Python Daemon Process Memory Management

2 голосов
/ 18 января 2012

В настоящее время я пишу процесс демона Python, который отслеживает файл журнала в режиме реального времени и обновляет записи в базе данных Postgresql на основе их результатов. Процесс заботится только об уникальном ключе, который появляется в файле журнала, и о самом последнем значении, которое он видит из этого ключа.

Я использую метод опроса и обрабатываю новую партию каждые 10 секунд. Чтобы уменьшить общий набор данных, чтобы избежать посторонних обновлений базы данных, я храню только ключ и самое последнее значение в dict. В зависимости от того, сколько активности было за последние 10 секунд, этот диктант может варьироваться от 10 до 1000 уникальных записей. Затем dict «обрабатывается», и эти результаты отправляются в базу данных.

Моя основная проблема связана с управлением памятью и изменениями во времени (дни, недели и т. Д.). Поскольку это процесс демона, который постоянно работает, использование памяти увеличивается в зависимости от размера dict, но никогда не уменьшается соответствующим образом. Я попытался сбросить dict с использованием стандартной разыменования и метода dict.clear () после обработки пакета, но не заметил никаких изменений в использовании памяти (FreeBSD / top). Кажется, что форсирование gc.collect () действительно восстанавливает некоторую память, но обычно только около 50%.

Ребята, у вас есть какой-нибудь совет, как мне поступить? Есть ли что-то еще, что я мог бы сделать в моем процессе? Не стесняйтесь вмешиваться, если вы видите другую дорогу вокруг вопроса:)

1 Ответ

0 голосов
/ 01 февраля 2012

Когда вы очищаете () dict или del объекты, на которые ссылается dict, содержащиеся объекты все еще находятся в памяти.Если на них нигде нет ссылок, они могут быть собраны как мусор, как вы видели, но сборщик мусора не выполняется явно в del или clear ().

Я нашел этот похожий вопрос для вас: https://stackoverflow.com/questions/996437/memory-management-and-python-how-much-do-you-need-to-know. Короче говоря, если вам не хватает памяти, вам действительно не нужно беспокоиться об этом.FreeBSD сама отлично справляется с управлением виртуальной памятью, поэтому, даже если в вашей программе на Python имеется огромное количество устаревших объектов, ваша машина, вероятно, не будет загружаться на диск.

...