【发布时间】:2014-06-02 12:24:39
【问题描述】:
我有一个 python 脚本来分析日志文件中的用户行为。
这个脚本使用file.readlines()从几个大文件(每个大约50 GB)中读取,然后逐行分析它们并将结果保存在python对象的dict中,分析完所有行之后,dict被写入磁盘。
由于我有一个 64 核和 96 GB 内存的服务器,我启动了这个脚本的 10 个进程,每个进程都处理部分数据。此外,为了节省花费在 IO 操作上的时间,我使用 file.readlines(MAX_READ_LIMIT) 代替 file.readline() 并设置 MAX_READ_LIMIT = 1 GB。
在服务器上运行此脚本并使用 top 命令显示任务资源后,我发现虽然我的脚本的每个进程将只占用大约 3.5 GB 内存(总共 40 GB),但在服务器上只剩下 380 MB服务器(服务器上没有同时运行其他显着消耗内存的应用程序)。
所以,我想知道内存在哪里?应该还有大约 96-40=36GB 内存?
如果我在上述观察中犯了一些错误,请告诉我。
一个假设是未使用的内存不会立即放回内存池,所以我想知道如何立即明确地释放未使用的内存。
我从python文档中了解到,python中管理内存有两种互补的方法:垃圾收集和引用计数,根据python doc:
由于收集器补充了已经使用的引用计数 Python,如果您确定您的程序,您可以禁用收集器 不会创建引用循环。
那么,我应该使用哪一个来处理我的案例,del obj 还是 gc.collect()?
【问题讨论】:
-
经典XY Problem.
标签: python memory garbage-collection