Perché% MEM aumentando gradualmente, anche se sto usando Archive :: Tar: in streaming?

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

  •  21-08-2019
  •  | 
  •  

Domanda

sto usando Archive :: :: Tar in streaming per archiviare una directory 4GB contenente file di codice sorgente piccolo molto piccolo e alcuni vasi. Sto usando un sistema con 4 GB di RAM e l'utilizzo di Archive :: :: Tar in streaming, perché non voglio che la mia intera directory di essere sulla memoria come risulta in condizione di memoria insufficiente. Ho la lettura dei file uno per uno dalla directory in maniera DFS con File :: Find e la scrittura al file tar usando Aggiungi metodo in Archivio :: :: Tar streaming. In qualsiasi punto del tempo solo file risiede nella memoria, anche allora% MEM del mio processo Perl sta gradualmente aumentando. Ha ottenuto fino al 20%. Non v'è alcun file nella mia directory che è di 800MB. Ho due domande qui 1) il motivo per cui è% MEM aumentando gradualmente? 2) Perché hai ne andato fino al 20%. È perché Archive :: Tar non è liberare la memoria dopo che ha scritto il contenuto del file tar?

È stato utile?

Soluzione

non è normale busta memoria VSZ a crescere quando si elaborano i dati in modo orientato al flusso, e moreso per RES (% MEM) che normalmente dovrebbe stabilizzare nel tipo di applicazione.

Perciò caldamente sospetto che i riferimenti incrociati ai dati vengono tenuti in giro (per esempio in un hash), o (meno probabilmente) che i riferimenti circolari vengono generati.

Si veda questo post, "ci sono strumenti per la ricerca di perdite di memoria nel mio programma perl" per suggerimenti su come tracciare le quali variabili (li essere nel codice o nel modulo che si utilizza) crescere la busta di memoria o mantenere riferimenti incrociati intorno .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top