确定Python的实际内存使用情况

时间:2013-04-13 03:24:35

标签: python windows memory-profiling

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

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

有没有办法找出Python实际使用了多少内存,或者失败了,以迫使它释放未使用的内存?我不想使用任何需要重新编译插补器的东西。

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

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

1 个答案:

答案 0 :(得分:6)

  

有没有办法找出Python实际使用的内存量,

不是来自with-in Python。

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

有一个名为Pympler的第三方工具可以帮助进行内存分析。此外,还有一个名为Guppy的编程环境,用于对象和堆内存大小调整,分析和分析。还有一个名为PySizer的类似项目,其中包含Python代码的内存使用情况分析器。

  

或者失败了,强迫它释放未使用的内存?

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