在Python中跟踪内存泄漏(多处理)

2024-06-25 07:20:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个multiprocessing应用程序泄漏内存。但是,泄漏不在主流程中(根据Dowsertop)而是在子流程中。有什么方法可以在子流程上使用Dowser(或类似工具)来跟踪泄漏吗?如果没有,它如何追踪它?在

在更新:我花了我花了很多时间试图使用heapygnibbler's code但我找不到漏洞。然后在主进程中停止cherrypy,在子进程中启动另一个cherrypy(使用Dowser)。但过了几分钟,雪莉就不再听波特了。。。:(所以我还是在寻找更好的主意。在


Tags: 工具方法内存应用程序进程top时间code
3条回答

我已经通过使用muppy-很好的工具找到了内存泄漏(在外部C库中),我希望我能早点找到它!谢谢大家的回答。在

我发现memory_profiler非常容易使用,但我不确定它如何与多处理交互,因为我从未使用过该模块。请参阅这个answer以获得简短的解释,以及该线程中提到其他Python分析器的其他答案。在

我发现了几个帖子,应该会很有帮助。还没来得及消化其中的所有信息,但我想我会发布这些链接,让你也看看。在

mariusgedminas有两篇关于在Python测试套件中寻找memleaks的帖子。他使用了内置的gcinspect模块,并简单地将对象图作为csv文件转储到磁盘上,因此即使对于mp应用程序,这种方法也能很好地工作。在

我今天晚些时候有空的时候再去调查。在

更新

Marius将他的测试平台作为一个名为objgraphlink)的开源项目发布。它跟踪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

相关问题 更多 >