python - Python mmap“内存泄漏”
问题描述
我有一个相当大的文件(磁盘上约 4gb),我想用 Python 的mmap
模块访问它以熟悉内存映射。我有一个 64 位系统,并且正在运行类似于以下示例的内容。当我运行它时,我注意到这个进程的内存消耗不断增加。我已经对其进行了分析,但pympler
没有任何突出之处。有人可以向我指出一些资源,这些资源可能会描述幕后发生的事情以及如何纠正这个问题(这样我就可以扫描文件而不会出现这种“内存泄漏”消耗我所有的内存)?谢谢!
import mmap
with open("/path/to/large.file", "r") as j:
mm = mmap.mmap(j.fileno(), 0, access=mmap.ACCESS_READ)
pos = 0
for i in range(mm.size()):
new_pos = mm.find(b"10", pos)
print(new_pos)
pos = new_pos + 1
编辑该文件看起来像这样:
0000001, data
0000002, more data
...
...
并且在第一个位置有这么多的连续值将会有很多命中find(b"10")
解决方案
收集流程的实时核心并使用 chap(可在https://github.com/vmware/chap获得的开源软件)分析该核心。
以下是与此用例相关的一些命令:
describe used
这将描述所有使用的分配(由 python 或本机代码分配),但不会直接告诉您任何已映射的区域。
describe free
这将显示已释放但相关空间尚未归还给操作系统的分配。
describe writable
describe readonly
这些将告诉您更大的区域,分别是可写或只读的。在您的情况下,在您为 mmapped 分配指定 ACCESS.READ 的情况下,该分配(如果仍然存在)将被视为“描述只读”输出的一部分或此类区域的一部分中的未知区域。
推荐阅读
- swift - 信号量如何保持异步循环有序?
- r - 使用 tmap 制作英国犯罪数量地图
- java - 试图从一个字符串中检索第一个最长的单词,其中一个句子包含相同长度的字符串?
- python - python excel openpyxl insert_rows 样式错误
- c - 如何跳过行,直到找到某种格式的行?
- python - 更改 shapefile 中的边缘颜色
- django - Django CreateView 请求传递
- git - 你如何让 github.com 显示两个提交的增量?
- javascript - 从字符串中提取方括号内的数字
- git - Github 桌面“错误:无法锁定 ref 'refs/remotes/origin/master':无法解析参考”(