Perl 为什么即使I';我正在使用归档::Tar:流式传输?

Perl 为什么即使I';我正在使用归档::Tar:流式传输?,perl,tar,Perl,Tar,我使用Archive::Tar::Streamed来归档4GB目录,其中包含非常小的源代码文件和一些JAR。我使用的系统具有4GB RAM,并且使用Archive::Tar::Streamed,因为我不希望我的整个目录都在内存中,因为这会导致内存不足的情况。我使用File::Find以DFS方式逐个读取目录中的文件,并使用Archive::tar::Streamed中的add方法将其写入tar文件。在任何给定的时间点上,内存中只有一个文件,即使在这个时间点上,perl进程的%MEM也在逐渐增加。

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

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

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

有关跟踪哪些变量(无论是在代码中还是在您使用的模块中)增加内存信封或保持交叉引用的技巧,请参阅本文