我正在对我在工作中编写的二进制文件解析器进行一些严肃的性能测试。在实施多处理以大大加快解析速度后,我转而专注于减少内存占用,这对于数十万个文件来说可能非常重要。所以,昨天我设置了一个技术含量极低的 Python 内存分析器(将 tasklist 作为系统命令运行,重定向到文件,读取并解析文件)并将其设置为工作,以查看是否存在任何随时间推移而逐渐积累的内存泄漏。以下是结果。
我的问题的答案似乎是否定的,或者至少不是很明显。(它每隔几千次将结果保存到一个搁置文件中,因此呈锯齿状)但显然我注意到的第一件事是 900 MB 的跳跃,这一切都发生在大约 90 秒的间隔内。这让我想起了我第一次进行这种高容量测试时记录的另一个事件:
当然,只是反向的。两次内存使用量都增加了近 1 GB。这似乎与我的程序无关,所以我可能不应该太担心。但有人知道是什么原因造成的吗?
更新:我再次运行了大规模解析会话,保留了常规任务列表日志,监控了 RAM 使用情况,并使用了 RamMap。任务列表没有发现任何可能导致 RAM 使用率上升的异常情况。(Excel 图表没有发现任何异常)但使用 RamMap,我想我找到了罪魁祸首。查看大规模不连续性发生前后的内存使用情况快照(这次发生在我的程序退出时),我发现“映射文件”类别使用了所有额外的内存。具体来说,我的程序正在创建的临时文件(已增长到超过 1 GB)占据了此类别的内存使用量;在“文件摘要”选项卡中,它使用了超过 1 GB。我修改了我的程序以将结果保存在此文件中,以避免使用过多的内存,因此不幸的是它仍然不知何故如此。这是因为我在使用之间没有关闭文件吗?打开它总是会将整个文件加载到内存中吗? (它是用 Python 的 shelve 模块创建的,用于存储映射数据)这可能仍然没有回答 Excel 图表中发生了什么的问题,但这是我整周都在处理的问题。