我目前正在尝试调试我的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
答案 0 :(得分:6)
有没有办法找出Python实际使用的内存量,
不是来自with-in Python。
您可以使用sys.getsizeof大致了解每个对象的内存使用情况,但这并不能捕获总内存使用情况,分配情况,碎片,未使用但未释放回操作系统的内存。
有一个名为Pympler的第三方工具可以帮助进行内存分析。此外,还有一个名为Guppy的编程环境,用于对象和堆内存大小调整,分析和分析。还有一个名为PySizer的类似项目,其中包含Python代码的内存使用情况分析器。
或者失败了,强迫它释放未使用的内存?
没有用于强制释放内存的公共API。