3

我正在使用 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 文件后没有释放内存吗?

4

1 回答 1

2

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

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

请参阅这篇文章,“是否有任何工具可以在我的 perl 程序中查找内存泄漏”,以获取有关追踪哪些变量(无论是在您的代码中还是在您正在使用的模块中)增加内存包络或保持交叉引用的提示。

于 2009-03-20T18:43:45.800 回答