在什么情况下,看起来像python内存泄漏的问题可能不是泄漏



我们有一个使用PyXB和其他库的python脚本,该脚本处理大量的XML和JSON数据,并且该脚本消耗越来越多的RAM,直到机器内存耗尽。

除了内存泄漏之外,是否还有其他情况会导致内存使用率如此之高?

在我们的案例中,看起来像是泄漏的原因是我们的python代码消耗RAM的速度比python垃圾收集器清理垃圾的速度快。

在我们的案例中,解决方案是在脚本中的每个工作单元结束时强制进行手动垃圾收集,如下所示:

gc.collect()

这使记忆得到了控制。

tracemalloc库证实了似乎正在泄漏的特定代码没有泄漏。收集垃圾,拍摄快照,然后在之前和之后比较快照,以证明没有分配额外的内存。

for _ in range(10000):
gc.collect();
snapshot1 = tracemalloc.take_snapshot()
response = test_parsing("assets.xml")
del response
gc.collect();
snapshot2 = tracemalloc.take_snapshot()
top_stats = snapshot2.compare_to(snapshot1, 'lineno')
print("[ Non Zero differences ]")
for stat in top_stats:
if (stat.size_diff != 0):
print(stat)

在我们的例子中,上面的非零差异列表在每次迭代后都是空的,证明没有泄漏。

最新更新