【问题标题】:Why is %MEM increasing gradually even though I'm using Archive::Tar:Streamed?即使我使用的是 Archive::Tar:Streamed,为什么 %MEM 会逐渐增加?
【发布时间】:2009-03-20 15:33:03
【问题描述】:

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

【问题讨论】:

    标签: perl tar


    【解决方案1】:

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

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

    请参阅这篇博文,"are there any tools for finding memory leaks in my perl program",了解有关追踪哪些变量(无论是在您的代码中还是在您正在使用的模块中)增加内存信封或保持交叉引用的提示。

    【讨论】:

      猜你喜欢
      • 2015-04-07
      • 1970-01-01
      • 2023-03-22
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      相关资源
      最近更新 更多