現在、ログ ファイルをリアルタイムで監視し、その結果に基づいて Postgresql データベースのエントリを更新する Python デーモン プロセスを作成しています。プロセスは、ログ ファイルに表示される一意のキーと、そのキーから見た最新の値のみを考慮します。
私はポーリング アプローチを使用しており、10 秒ごとに新しいバッチを処理しています。データベースへの余分な更新を避けるためにデータの全体的なセットを減らすために、キーと最新の値のみを dict に保存しています。過去 10 秒間のアクティビティの量に応じて、この dict は 10 ~ 1000 の一意のエントリの範囲で変化する可能性があります。次に、辞書が「処理」され、それらの結果がデータベースに送信されます。
私の主な関心事は、メモリ管理と経時的 (数日、数週間など) の口述を中心に展開しています。これは常に実行されているデーモン プロセスであるため、dict のサイズに基づいてメモリ使用量が膨張しますが、適切に縮小されることはありません。バッチを処理した後、標準の逆参照と dict.clear() メソッドを使用して dict をリセットしようとしましたが、メモリ使用量に変化はありませんでした (FreeBSD/top)。gc.collect() を強制するとメモリが回復するようですが、通常は約 50% しか回復しません。
私がどのように進めるべきかについて何かアドバイスはありますか?私のプロセスで他にできることはありますか?この問題について別の道を見つけたら、遠慮なく声をかけてください:)