为什么%MEM会逐渐增加,即使我正在使用Archive :: Tar:Streamed?

时间:2009-03-20 15:33:04

标签: perl tar

我正在使用Archive :: Tar :: Streamed来存档包含非常小的小源代码文件和一些jar的4GB目录。我正在使用具有4GB RAM的系统并使用Archive :: Tar :: Streamed,因为我不希望我的整个目录都在内存中,因为它会导致内存不足。我使用File :: Find以DFS方式从目录中逐个读取文件,并使用Archive :: Tar :: Streamed中的add方法将其写入tar文件。在任何给定的时间点,只有一个文件驻留在内存中,即使那时我的perl进程的%MEM也在逐渐增加。它达到了20%。我的目录中没有800MB的文件。我这里有两个问题 1)为什么%MEM逐渐增加? 2)为什么它涨到20%。是因为Archive :: Tar在将内容写入tar文件后没有释放内存吗?

1 个答案:

答案 0 :(得分:2)

当您以流面向方式处理数据时,VSZ内存包络增长是不正常的,而RES(%MEM)通常应该在您的应用程序中稳定下来。

因此,我强烈怀疑数据的交叉引用被保留(例如在散列中),或者(不太可能)生成循环引用。

有关追踪哪些变量(在您的代码中或您正在使用的模块中)增加内存包络或保持交叉引用的提示,请参阅此文章"are there any tools for finding memory leaks in my perl program"