Por que% MEM aumentando gradualmente mesmo que eu estou usando Archive :: Tar: Streamed?

StackOverflow https://stackoverflow.com/questions/666655

  •  21-08-2019
  •  | 
  •  

Pergunta

Eu estou usando Archive :: Tar :: transmitido para arquivar um diretório 4GB contendo arquivos de código pequena fonte muito pequenos e alguns frascos. Eu estou usando um sistema com 4 GB de RAM e usando Archive :: Tar :: Streamed porque eu não quero que meu diretório inteiro para estar na memória, uma vez que resulta em falta de condição de memória. I leitura de arquivos um por um a partir do diretório de forma DFS usando File :: Localizar e escrevê-lo para o arquivo tar utilizando o método add no Arquivo :: Tar :: Streamed. Em qualquer ponto do tempo apenas um arquivo é residente na memória, mesmo MEM então% do meu processo perl está a aumentar gradualmente. Ele levantou-se para 20%. Não há nenhum arquivo no meu diretório que é de 800MB. Eu tenho duas perguntas aqui 1) Por que é% MEM aumentando gradualmente? 2) Por que tens que subiu para 20%. Será que é porque Archive :: Tar não está liberando a memória depois de ter escrito o conteúdo para o arquivo tar?

Foi útil?

Solução

Não é normal para o seu envelope de memória VSZ a crescer quando você processar seus dados de forma orientada para o riacho, e mais ainda para RES (% MEM) que normalmente deve estabilizar em seu tipo de aplicação.

Por isso, seria altamente suspeito que referências cruzadas para os dados estão a ser mantido em torno (por exemplo, em um hash), ou (menos provavelmente) que referências circulares são gerados.

Veja este post, "existem algumas ferramentas para localizar vazamentos de memória no meu programa perl" para obter dicas sobre rastreamento para baixo quais variáveis ??(sejam eles em seu código ou no módulo você está usando) crescer o envelope de memória ou manter referências cruzadas ao redor .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top