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

Ant*_*ony 1 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
Run Code Online (Sandbox Code Playgroud)

Ray*_*ger 6

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

不是来自with-in Python.

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

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

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

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