如何诊断Python程序中潜在的内存泄漏?

时间:2013-07-12 21:15:55

标签: python linux memory-management

我有一个256MB RAM的嵌入式Linux系统。它上面运行着一个很大的代码库,大多数都是用C ++编写的,但有些实用程序是用Python编写的。我们有一个Python“包管理器”,它使用Python apt module处理系统更新(我们将更新分发为.deb文件)。运行时,此应用程序使用大部分系统RAM。我正在使用top监视RAM使用情况,查看Python进程的RSS(可能这不是分析进程内存使用情况的有效方法吗?可以参考建议)。

该行

    cache = apt.Cache() 
定期调用

来检查系统的状态,每次调用时似乎消耗大约20MB,并且看起来不会返回此内存。我尝试在函数末尾删除缓存对象并运行gc.collect(),这似乎没什么帮助。

如何减少此程序的内存使用量?

该平台是ARM Cortex A8,运行Linux 3.2,Debian Wheezy和Python 2.7.3。

2 个答案:

答案 0 :(得分:4)

Garbage Collector interface modulegc)正是您可以用来进一步调试此问题的。

调试泄漏的程序调用:

gc.set_debug(gc.DEBUG_LEAK)

这会将有关垃圾收集的调试信息输出到您的控制台。

为了进一步调试,gc模块提供了更多功能,包括列出垃圾收集器跟踪的所有对象,禁用/启用收集器或手动触发垃圾收集的功能。

如果您没有泄漏并且只想降低内存使用量,请尝试使用gc.set_threshold在较低的内存使用点触发垃圾回收。

答案 1 :(得分:0)

clean命令用于通过从本地存储库清除检索到的(下载的).deb文件(包)来释放磁盘空间。

$ sudo apt-get clean

希望这有帮助!