2014-01-20 47 views
2

我有一个Python程序,开始吃大量的RAM。问题在于它已经工作了大约2天没有问题,但突然开始吃了大量的RAM。剧本很大,很难理解那里发生的事情。调试内存消耗已运行脚本的泄漏

有什么办法可以附加到正在运行的进程并转储一些关于对象的信息吗?因此,我将能够理解那里发生了什么。

我用一些Python模块是,它报告了我一些数据这样的:

Strings: 4567, total memory: 45MB 
Lists: 32, total memory: 12MB 
Dicts: 1, total memory: 1MB 
... 

当然,这只是一个想法 - 任何内存相关的报告表示赞赏。

我发现唯一的工作解决方案来调试正在运行的进程:gdb。但我根本不熟悉它。

请注意,我不想更改代码,导入pdb,重新启动脚本等 - 否则我必须再等两天。

谢谢!

+0

您可以使用'-p'附加到进程。你甚至可以使用'ltrace' /'strace'来获得内存分配。例如,请参阅http://techblog.rosedu.org/tags/debugging.html –

+0

中的帖子@MihaiMaruseac谢谢 – Spaceman

回答

2

在基于glibc的系统上,您可以使用gdb-heap扩展来检查正在运行的进程的堆。 gdb-heap知道一些关于Python如何进行内存管理的知识。请参阅:https://fedorahosted.org/gdb-heap/