> Il giorno 4 set 2019, alle ore 10:50, Carlos Catucci 
> <carlos.catu...@gmail.com> ha scritto:
> 
> 
> 
>> On Wed, 4 Sep 2019 at 10:44, Giovanni Vittorio Spina 
>> <vittorio.sp...@gmail.com> wrote:
>> Ciao a tutti, 
>> Ho un problema importante che non so bene come risolvere.
>> Faccio applicazioni python per lavoro. Sono grafiche oppure solo testuali 
>> che girano su macchine linux di varia natura.
>> Su tutte sto avendo problemi di ram nel senso che la ram occupata dal 
>> processo python aumenta sempre fino ad un kill del sistema operativo per out 
>> of memory quando la ram del sistema finisce. 
>> Al momento posso solo risolvere con un wachdog che riavvii l’applicazione 
>> quando viene chiusa, ma non mj pare la cosa più elegante.
>> Uso parecchie librerie di terzi e fatte da me in dieci anni.
>> Conoscete un modo per debuggare una cosa del genere?
>> Non so bene dove sbattere la testa.
> 
> 
> Senza vedere il codice difficile aiutarti. Pero' tieni conto di una cosa, 
> Python ha il meccanismo di Garbage Collecting, per cui al contrario di C non 
> ti devi preoccupare di liberrare la mmoria quando un componente non viene piu 
> usato. Pero' se il tuo codice crea una serie di oggetti (ad esempio) che 
> hanno scope globale, questi non verranno mai distrutti fino  che 
> lìapplicazione sta girando. Se continui ad aggiungere prima o poi ovvio che 
> saturi la memoria. 
> Altro ottimo modo di arrivare questo e' caricare in memoria tabelle di dati 
> senza paginarle, esempio dati di una tabella dDb che contine decine di campi 
> e milioni di record. 
> Molto probabile pero' che si tratti di bad design delle applicazioni. Se 
> metti su pastebin il codice (sempre che non sia closed) i puo' provare a 
> vedere, in caso contrario dovresti almeno indicare il flusso logico che usi 
> per una applicazione che presenta il problema.
> 
> Carlos
> _______________________________________________
> Python mailing list
> Python@lists.python.it
> https://lists.python.it/mailman/listinfo/python

Il fatto è che il codice è piuttosto grande, si parla di centinaia di migliaia 
di righe fra librerie e altro quindi dare il codice è complicato. Ho notato il 
problema da quando uso sqlite3 per gestire le variabili di configurazione, 
potrebbe nascere si lì ma non posso escludere che il problema sia altrove. In 
generale non ho variabili che incremento di continuo. E ho notato un incremento 
anche killando il thread di sqlite e cancellando con del(var) sia con che 
cursor di sqlite.
Non so bene come analizzare la cosa.
C’è un modo per vedere lo spazio allocato per variabile in una applicazione, 
magari anche da dentro al main e avere una lista di quanto crescano le 
variabili?
Il problema non si risolve neanche chiamando esplicitamente il collect di gc.
Vittorio
_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python

Rispondere a