Почему% MEM постепенно увеличивается, хотя я использую Archive :: Tar: Streamed?

Я использую Archive :: Tar :: Streamed для архивации каталога размером 4 ГБ, содержащего очень маленькие небольшие файлы исходного кода и несколько банок. Я использую систему с 4 ГБ ОЗУ и использую Archive :: Tar :: Streamed, потому что я не хочу, чтобы весь мой каталог находился в памяти, поскольку это приводит к нехватке памяти. Я читаю файлы один за другим из каталога в манере DFS, используя File :: Find, и записываю их в tar-файл, используя метод add в Archive :: Tar :: Streamed. В любой момент времени в памяти находится только один файл, даже тогда% MEM моего процесса perl постепенно увеличивается. Дошло до 20%. В моем каталоге нет файла размером 800 МБ. У меня здесь два вопроса: 1) почему% MEM постепенно увеличивается? 2) Почему поднялось до 20%. Это потому, что Archive :: Tar не освобождает память после записи содержимого в tar-файл?


person Ram    schedule 20.03.2009    source источник


Ответы (1)


Если вы обрабатываете данные в потоковом режиме, это ненормально, если вы обрабатываете данные в режиме потоковой передачи, и, более того, для RES (% MEM), который обычно должен стабилизироваться в вашем приложении.

Поэтому я сильно подозреваю, что перекрестные ссылки на данные хранятся (например, в хэше) или (что менее вероятно) генерируются циклические ссылки.

См. Этот пост, "являются в моей программе на Perl есть какие-либо инструменты для поиска утечек памяти », где можно найти советы по отслеживанию того, какие переменные (будь то в вашем коде или в используемом вами модуле) увеличивают объем памяти или сохраняют перекрестные ссылки.

person vladr    schedule 20.03.2009