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

fre*_*set 2 python linux memory-management

我有一个带有 256MB RAM 的嵌入式 Linux 系统。有一个大型代码库在其上运行,大多数使用 C++,但一些实用程序使用 Python。我们有一个 Python“包管理器”,它使用Python apt 模块处理系统更新(我们将更新分发为 .deb 文件)。运行时,此应用程序使用系统 RAM 的很大一部分。我正在使用 top 监视 RAM 使用情况,查看 Python 进程的 RSS(也许这不是分析进程内存使用情况的有效方法?向建议开放)。

线

    缓存 = apt.Cache() 

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

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

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

jsa*_*nen 5

垃圾收集器接口模块( gc) 正是您可以在这里用来进一步调试此问题的模块。

要调试泄漏的程序调用:

gc.set_debug(gc.DEBUG_LEAK)
Run Code Online (Sandbox Code Playgroud)

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

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

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