1

我目前正在尝试调试我的 Python 程序的内存使用情况(在带有 CPython 2.7 的 Windows 上)。但不幸的是,我什至找不到任何方法来可靠地测量它当前使用的内存量。

我一直在使用任务管理器/资源监视器来测量进程内存,但这似乎只对确定峰值内存消耗有用。很多时候,即使在相关对象被垃圾回收之后很长时间,Python 也不会减少提交或工作集。

有没有办法找出 Python 实际使用了多少内存,或者如果没有,强制它释放未使用的内存?我不想使用任何需要重新编译interperter的东西。

证明它没有释放未使用内存的行为示例:

(after some calculations)   # 290k
gc.collect()                # still 290k
x = range(9999999)          # 444k
del x                       # 405k
gc.collect()                # 40k
4

1 回答 1

6

有什么方法可以找出 Python 实际使用了多少内存,

不是来自 Python 内部。

您可以使用sys.getsizeof大致了解每个对象的内存使用情况,但是它不会捕获总内存使用情况、过度分配、碎片、未使用但未释放回操作系统的内存。

有一个名为Pymler的第三方工具可以帮助进行内存分析。此外,还有一个称为Guppy的编程环境,用于对象和堆内存大小调整、分析和分析。还有一个类似的项目叫做PySizer ,它带有一个用于 Python 代码的内存使用分析器。

还是失败了,迫使它释放未使用的内存?

没有用于强制释放内存的公共 API。

于 2013-04-13T04:05:16.047 回答