我有一个Python程序开始吃掉很多内存。问题是它已经工作了大约2天没有问题,但突然开始吃掉大量的RAM。脚本非常大,很难理解那里发生了什么。
有没有办法附加到正在运行的进程并转储有关对象的一些信息?因此,我将能够理解那里发生了什么。
我使用了一些python模块,它报告了一些像这样的数据:
Strings: 4567, total memory: 45MB
Lists: 32, total memory: 12MB
Dicts: 1, total memory: 1MB
...
当然,这只是一个想法 - 任何与记忆相关的报道都会受到赞赏。
我找到了调试正在运行的进程的唯一可行解决方案:gdb。但我根本不熟悉它。
请注意,我不想更改代码,导入pdb,重新启动脚本等等 - 否则我必须再等2天。
谢谢!
答案 0 :(得分:2)
在基于glibc的系统上,您可以使用gdb-heap扩展来检查正在运行的进程的堆。 gdb-heap也知道Python如何进行内存管理。请参阅:https://fedorahosted.org/gdb-heap/