長時間走っている大きなサーバーがあり、数週間にわたってメモリ使用量が着実に増加しています。Pythonでuncollectableなゴミを作成する方法は?
一般に、以下に指摘されているように、その漏れは私の問題です。しかし、私は多くのことをする必要はありませんので、私は漏れがあるかどうかを見たいと思っています。
コンソール出力の取得は難しいので、私はgc.set_debug()
で動作していません。私は簡単にAPIを追加してgc.collect()
を実行してから、gc.garbage
を繰り返し実行し、その結果をHTTP経由で私に送り返すので、これは大きな問題ではありません。
私の問題は、短時間ローカルに実行すると、私のgc.garbage
は常に空です。私はそれを展開する前にリークを列挙したコードをテストすることはできません。
ガーベッジの回収不可能なビットを作成するための簡単なレシピがありますので、ごみをリストするコードをテストできますか? (ガベージコレクタがでファイナライザを実行するためにどの順序を知らないため)
答えはありませんが、Giovanni Bajoは先月EuroPythonでメモリリークをデバッグする素晴らしい話をしました。トークビデオはここにあります:http://ep2011.europython.eu/conference/talks/debugging-and-profiling-techniques – grifaton
少なくとも1つの種が必要だと思われます:( – Will