Я использую 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-файл?
Почему% MEM постепенно увеличивается, хотя я использую Archive :: Tar: Streamed?
Ответы (1)
Если вы обрабатываете данные в потоковом режиме, это ненормально, если вы обрабатываете данные в режиме потоковой передачи, и, более того, для RES (% MEM), который обычно должен стабилизироваться в вашем приложении.
Поэтому я сильно подозреваю, что перекрестные ссылки на данные хранятся (например, в хэше) или (что менее вероятно) генерируются циклические ссылки.
См. Этот пост, "являются в моей программе на Perl есть какие-либо инструменты для поиска утечек памяти », где можно найти советы по отслеживанию того, какие переменные (будь то в вашем коде или в используемом вами модуле) увеличивают объем памяти или сохраняют перекрестные ссылки.
person
vladr
schedule
20.03.2009