私が使用している Twisted アプリは、メモリの問題により常に強制終了されていました。プログラムはサイズが大きくなり、OS によってシャットダウンされる前にシステムのメモリをすべて消費しました。再起動して繰り返します。
これは仮想サーバー上にあるため、メモリを 2 倍にしたところ、問題は解決しました。デーモンは約 1.25 GB のメモリで安定しました。
すべてのメモリが何/どこに吸い込まれているのかを知るために、これをどのようにプロファイルするのが最善かについて誰かアドバイスがありますか?
アプリの情報が役立つ場合、私はツイスト リアクターと internet.timer.TimerService を使用して、3 つの「サービス」を介して更新するアイテムのデータベースをポーリングしています。処理するアイテムは twisted.internet.defer.DeferredList にプッシュされ、それらの処理は deferToThread ブロックで行われます。遅延プロセスには、いくつかのブロック操作 (Web ページのフェッチなど) と、多くの HTML 解析 (美しいスープやその他のライブラリ) があります。私は、reactor.threadpool のサイズを 10 にすることを提案しました。各「サービス」は、10 個のトークンを持つ SemaphoreService を使用してスレッド化されます。私は、このデーモンが 3 倍ではなく、約 400MB のメモリで最大になることを本当に期待していました。