web-dev-qa-db-ja.com

Pythonプログラムでメモリリークを見つけるにはどうすればよいですか?

重複の可能性:
Pythonメモリプロファイラー

私はかなり複雑な(約20,000)行を持っていますPythonプログラムは、いくつかの開発の後、実行時にメモリの消費量を増やし始めました。すべてを見つけるための最良のツールとテクニックは何ですか?メモリは使用されていますか?

通常、これは、オブジェクトへの参照を予期せず保持するか、拡張モジュールのバグに起因します(Python 2.4インストールをしばらく使用しているため、特に可能性は低いです)。

Twisted、Twisted Conch、MySQLdbなどのさまざまなサードパーティライブラリを使用しています。

31
Dickon Reed

一般に、カーソルを閉じられないことは、最も一般的な種類のメモリリークの1つです。ガベージコレクターは、カーソルに含まれるMySQLリソースを確認できません。 MySQLは、close()メソッドが明示的に呼び出されない限り、Python側が解放されたことを認識していません。

経験則。開いて、そして閉じるカーソルを管理できる限り短いコードスパンで使用します。

16
S.Lott

Pythonのメモリは、ガベージコレクターによって管理されます。一般に、C/C++で拡張モジュールを作成している場合を除いて、メモリリークの問題は発生しません(Python2.5以降では問題ありません)。その場合、Valgrind(ブログ投稿- http://bruynooghe.blogspot.com/2008/12/finding-memory-leaks-in-python.html )が役立つ場合があります。この人 http://mg.pov.lt/blog/hunting-python-memleaks がPDBとmatplotlibを使用してメモリリークを追跡していることがわかりました。これがお役に立てば幸いです。Pythonメモリリークを修正した経験はありません。

1
batbrat