Python进程消耗越来越多的系统内存,但heapy显示出大致不变的使用率

Python进程消耗越来越多的系统内存,但heapy显示出大致不变的使用率,python,macos,Python,Macos,我正在尝试识别我正在开发的Python程序中的内存泄漏。我目前正在Mac OS 64位上运行Python2.7.4。我安装了heapy来解决这个问题 该程序涉及使用搁置模块创建、存储和读取大型数据库。我没有使用写回选项,我知道这会造成内存问题 Heapy用法表明,在程序执行期间,内存大致保持不变。然而,我的活动监视器显示内存在快速增长。在15分钟内,进程已经消耗了我所有的系统内存(16gb),我开始看到分页。知道为什么heapy没有正确跟踪这个吗 看一看。您很可能看到的不是内存泄漏,而是内存碎片

我正在尝试识别我正在开发的Python程序中的内存泄漏。我目前正在Mac OS 64位上运行Python2.7.4。我安装了heapy来解决这个问题

该程序涉及使用搁置模块创建、存储和读取大型数据库。我没有使用写回选项,我知道这会造成内存问题

Heapy用法表明,在程序执行期间,内存大致保持不变。然而,我的活动监视器显示内存在快速增长。在15分钟内,进程已经消耗了我所有的系统内存(16gb),我开始看到分页。知道为什么heapy没有正确跟踪这个吗

看一看。您很可能看到的不是内存泄漏,而是内存碎片。我发现的最佳解决方法是确定大型工作集操作的实际输出是什么,在新进程中加载大型数据集,计算输出,然后将该输出返回到原始进程


他有一些很好的洞察力和榜样。在你的问题中,我看不出有任何东西会妨碍PyPy的使用。

程序的第一步是构建数据库本身。我生成一个新条目,将其存储到书架上,然后继续下一个条目。我不确定这个大集合的“输出”是什么。我应该在对象被推到架子上之后释放它吗?如果没有更多的程序知识,很难说。要序列化到的文件有多大?您正在创建的对象的范围有多窄?为什么必须使用搁置模块?搁置对象后是否有更多的引用?2注释:1)我不需要任何问题的具体答案,但是你应该考虑它们,2)没有一个好的方法来“解放”一个对象。在下一次收集过程中,它将或不会被垃圾收集,具体取决于引用计数器是否表示无法访问。创建数据库后,该文件的大小大约为4gb。在构建数据库之后,我需要一次对一个对象执行分析。我决定使用搁置模块来节省内存。我检查了,gc.garbage在整个程序构建过程中返回一个空列表。del命令不会释放内存?不会
del
只会使符号在当前范围内不可访问,并减少refcount。我重写了初始代码,以便对数据库进行实际分析,这样每个进程(使用子进程)只看到数据库的一部分,并且工作正常。我认为碎片化确实是个问题。谢谢你的帮助。