2009-03-20 10 views
3

私はArchive :: Tar :: Streamedを使用して、非常に小さな小さなソースコードファイルといくつかのjarを含む4GBディレクトリをアーカイブします。私は4GBのRAMとArchive :: Tar :: Streamedを使用するシステムを使用しています。なぜなら、私のディレクトリ全体をメモリに保存したくないからです。 File :: Findを使用してDFS形式でディレクトリからファイルを1つずつ読み込み、Archive :: Tar :: Streamedのaddメソッドを使用してtarファイルに書き込みます。ある時点で、メモリ内に1つのファイルしか存在しません。それでも、perlプロセスの%MEMが徐々に増加しています。それは20%まで上昇した。私のディレクトリには800MBのファイルがありません。私はここに2つの質問があります 1)なぜ%MEMは徐々に増えていますか? 2)なぜ20%まで上がったのですか?それはArchive :: Tarが内容をtarファイルに書き込んだ後でメモリを解放していないからですか?Archive :: Tar:Streamedを使用していても%MEMが徐々に増加しているのはなぜですか?

答えて

2

ストリーム指向の方法でデータを処理すると、VSZメモリのエンベロープが大きくならず、アプリケーションの種類によって通常は安定するRES(%MEM)のmoresoは正常ではありません。

したがって、データへの相互参照が(たとえばハッシュで)保持されているか、または循環参照が生成されている可能性は低いと思われます。

このポスト"are there any tools for finding memory leaks in my perl program"を参照して、どの変数(使用しているコードまたは使用しているモジュール内の変数)をトレースしてメモリエンベロープを拡大するか、相互参照を維持してください。

関連する問題