15

我有一个multiprocessing泄漏内存的应用程序。但是,泄漏不在主进程中(根据Dowsertop),而是在子进程中。有什么方法可以在子进程上使用 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 的文章。他正在使用内置模块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 回答