В настоящее время я пишу процесс демона Python, который отслеживает файл журнала в режиме реального времени и обновляет записи в базе данных Postgresql на основе их результатов. Процесс заботится только об уникальном ключе, который появляется в файле журнала, и о самом последнем значении, которое он видит из этого ключа.
Я использую метод опроса и обрабатываю новую партию каждые 10 секунд. Чтобы уменьшить общий набор данных, чтобы избежать посторонних обновлений базы данных, я храню только ключ и самое последнее значение в dict. В зависимости от того, сколько активности было за последние 10 секунд, этот диктант может варьироваться от 10 до 1000 уникальных записей. Затем dict «обрабатывается», и эти результаты отправляются в базу данных.
Моя основная проблема связана с управлением памятью и изменениями во времени (дни, недели и т. Д.). Поскольку это процесс демона, который постоянно работает, использование памяти увеличивается в зависимости от размера dict, но никогда не уменьшается соответствующим образом. Я попытался сбросить dict с использованием стандартной разыменования и метода dict.clear () после обработки пакета, но не заметил никаких изменений в использовании памяти (FreeBSD / top). Кажется, что форсирование gc.collect () действительно восстанавливает некоторую память, но обычно только около 50%.
Ребята, у вас есть какой-нибудь совет, как мне поступить? Есть ли что-то еще, что я мог бы сделать в моем процессе? Не стесняйтесь вмешиваться, если вы видите другую дорогу вокруг вопроса:)