Почему% MEM постепенно увеличивается, хотя я использую Archive :: Tar: Streamed? - PullRequest
3 голосов
/ 20 марта 2009

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

1 Ответ

2 голосов
/ 20 марта 2009

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

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

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

...