15

multiprocessingメモリをリークするアプリケーションがあります。ただし、リークはメイン プロセスではなく ( Dowser andによるとtop)、サブプロセスで発生します。サブプロセスで Dowser (または同様のツール) を使用してリークを追跡する方法はありますか? そうでない場合、どのように追跡しますか?

更新: heapygnibbler のコードを使用しようと多くの時間を費やしましたが、リークを見つけることができませんでした。次に、メイン プロセスで cherrypy を停止し、サブプロセスで別のもの ( Dowserを使用) を開始しました。しかし、数分後、CherryPy はポートのリッスンを停止します... :( だから私はまだより良いアイデアを探しています.

4

3 に答える 3

3

memory_profilerは非常に使いやすいと思いましたが、そのモジュールを使用したことがないため、マルチプロセッシングとどのように相互作用するかわかりません。他のPythonプロファイラーについては、このスレッドの簡単な説明と他の回答を参照してください。

于 2012-11-07T01:45:25.533 に答える
3

muppyを使用して(外部Cライブラリにあった)メモリリークを探し出しました。すばらしいツールです。もっと早く見つけられたらいいのにと思います。答えてくれてありがとう。

于 2012-11-14T12:49:53.217 に答える
1

非常に役立つと思われる投稿をいくつか見つけました。それらのすべての情報を消化する時間はまだありませんが、リンクを投稿して、それらも見ていただけるようにすると思いました.

Marius Gedminas は、Python テスト スイートでの memleaks のハンティングに関する 2 つの投稿を行っています。彼は組み込みのモジュールgcinspectモジュールを使用し、オブジェクト グラフを csv ファイルとしてディスクにダンプするだけなので、このアプローチはアプリケーションに対しても非常にうまく機能するはずmpです。

時間があるときに、今日の後半に自分のことを調べます。

アップデート

objgraphMarius は、 (リンク)という名前のオープン ソース プロジェクトとしてテスト装置をリリースしました。オブジェクト参照を追跡しgcますが、関数呼び出し後に追加された型のインスタンスの数などの役立つ情報を出力したり、オブジェクトの完全な参照チェーンを表示したりできます。

mpドキュメントはかなり自明であり、アプリケーションでも同様に機能しない理由がわかりません。

ただし、メモリリークが基になる c ライブラリから発生している場合、これは役に立たない可能性があります。少なくとも、リークがどこにあるかを知る必要があります。Python コードに含まれていないことが判明した場合は、コードをリファクタリングして、メイン プロセスで関連する c ライブラリを実行し、Valgrindなどを使用してリークを検出できるようにする必要があります。


元の投稿 http://mg.pov.lt/blog/hunting-python-memleaks.html

彼が使用しているツールについて詳しく 説明するものhttp://mg.pov.lt/blog/python-object-graphs.html

私が始めた投稿 http://www.lshift.net/blog/2008/11/14/tracing-python-memory-leaks

于 2012-11-10T11:08:19.960 に答える