Re: [Python] Memory leak

2019-09-08 Per discussione Andrea D'Amore
On Wed, 4 Sep 2019 at 13:43, Giovanni Porcari
 wrote:
> prova a dare un occhio a questo se ti aiuta:
> https://benbernardblog.com/tracking-down-a-freaky-python-memory-leak/

Bell'articolo, grazie per il link.


-- 
Andrea
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Memory leak

2019-09-04 Per discussione Giovanni Vittorio Spina


> Il giorno 4 set 2019, alle ore 14:40, Giovanni Vittorio Spina 
>  ha scritto:
> 
> Effettivamente l’eliminazione dei print non ha cambiato nulla, speravo che 
> qualcosa rimanesse in memoria, ma come prevedibile non è così.
> 
> Mi puoi fare un esempio del sys.settrace? Come stampo memoria linea e thread?
> 
> Grazie in anticipo
> 
> V
Credo di aver trovato il colpevole.
Come ho già detto, uso sqlite3 per gestire la configurazione via web.
Ho notato che scrivendo continuamente sul database per inserire dei log, si 
creava un file pager nella stessa dir dove ho il database.db
Probabilmente quando le scritture sono tante sqlite3 alloca variabili che poi 
non cancella... dopo aver tolto questo treno di scritture, la memoria sembra 
rimanere stabile.
V
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Memory leak

2019-09-04 Per discussione Giovanni Vittorio Spina


> Il giorno 4 set 2019, alle ore 14:25, Antonio Cavallo 
>  ha scritto:
> 
> sys.stdout.flush()
> 
> In genere puoi usare sys.settrace con una funzione che stampi ogni 10 secondi 
> la memoria usata (e la linea di codice ed il thread): semplice ed efficace 
> anche se non e' "scalabile" (a lavoro usiamo un framework per questo ma è 
> codice proprietario

Effettivamente l’eliminazione dei print non ha cambiato nulla, speravo che 
qualcosa rimanesse in memoria, ma come prevedibile non è così.

Mi puoi fare un esempio del sys.settrace? Come stampo memoria linea e thread?

Grazie in anticipo

V
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Memory leak

2019-09-04 Per discussione Antonio Cavallo


> Grazie, adesso me lo leggo.
> Stavo anche pensando: in generale eseguo molti print di debug, non un flusso 
> esagerato, ma comunque continuo.

Intendi Logger.info/debug/warn/exception ? Oppure un semplice print? In genere 
non e' un problema a meno che l'applicazione non abbia una finestra dedicata a 
visualizzare un log di sistema che accumula i logs

> Potrebbe essere questo un motivo di incremento della ram occupata? Conoscete 
> un modo per cancellare un eventuale buffer stdout?
>Adesso sto provando a vedere se trovo incrementi nella memoria eliminando 
>tutte le scritture a shell.

sys.stdout.flush()

In genere puoi usare sys.settrace con una funzione che stampi ogni 10 secondi 
la memoria usata (e la linea di codice ed il thread): semplice ed efficace 
anche se non e' "scalabile" (a lavoro usiamo un framework per questo ma e' 
codice proprietario).

 

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Memory leak

2019-09-04 Per discussione Giovanni Vittorio Spina


> Il giorno 4 set 2019, alle ore 13:42, Giovanni Porcari 
> 
> 
> prova a dare un occhio a questo se ti aiuta:
> 
> https://benbernardblog.com/tracking-down-a-freaky-python-memory-leak/
> 
> 
> Ciao
> 
> G

Grazie, adesso me lo leggo.
Stavo anche pensando: in generale eseguo molti print di debug, non un flusso 
esagerato, ma comunque continuo.
Potrebbe essere questo un motivo di incremento della ram occupata? Conoscete un 
modo per cancellare un eventuale buffer stdout?
Adesso sto provando a vedere se trovo incrementi nella memoria eliminando tutte 
le scritture a shell.
V
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Memory leak

2019-09-04 Per discussione Giovanni Porcari


> Il giorno 4 set 2019, alle ore 10:43, Giovanni Vittorio Spina 
>  ha scritto:
> 
> 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.
> Grazie in anticipo.
> Vittorio



prova a dare un occhio a questo se ti aiuta:

https://benbernardblog.com/tracking-down-a-freaky-python-memory-leak/


Ciao

G

> 
> ___
> Python mailing list
> Python@lists.python.it
> https://lists.python.it/mailman/listinfo/python

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Memory leak

2019-09-04 Per discussione Carlos Catucci
On Wed, 4 Sep 2019 at 11:23, Giovanni Vittorio Spina <
vittorio.sp...@gmail.com> wrote:

> Hai ragione, mi rendo conto, ma cerco, se c’è, una roba tipo questa:
>
> for obj in globals().values():
>   print str(obj), sys.getsizeof(obj)
>
> Insomma un’idea di debug per capire se c’è una variabile che cresce nel
> tempo, dopo di che magari la vado a cercare per capire quale sia l’inghippo.
> La mia applicazione utilizza anche threads quindi ho anche threads
> separati.
>

Per debuggare potresti usare un IDE come WingIde. Dato che hai 30 giorni (3
gruppi di 10 giorni) di prova gratuita, anche se non vuoi comprarlo ti
bastano per fare i tupi test.
Certo se usi pure il threads diventa ancora piu' ostico il tutto.

Carlos
-- 
EZLN ... Para Todos Todo ... Nada para nosotros
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Memory leak

2019-09-04 Per discussione Giovanni Vittorio Spina


> Il giorno 4 set 2019, alle ore 11:14, Carlos Catucci 
>  ha scritto:
> Cosi' come lo esponi il problema e' come se tu volessi una diagnosi dal tuo 
> dottre per telefono e dicendogli solamente  "Dottore mi sento male".
> Senza spaere cosa fanno le applicazioni e come non penso sia possibile 
> esserti di aiuto.
> 
> P.S. Evita il top quoting nelle risposte.
> 
> Carlos
> --
> EZLN ... Para Todos Todo ... Nada para nosotros
> ___
> Python mailing list
> Python@lists.python.it
> https://lists.python.it/mailman/listinfo/python

Hai ragione, mi rendo conto, ma cerco, se c’è, una roba tipo questa:

for obj in globals().values():
  print str(obj), sys.getsizeof(obj)

Insomma un’idea di debug per capire se c’è una variabile che cresce nel tempo, 
dopo di che magari la vado a cercare per capire quale sia l’inghippo.
La mia applicazione utilizza anche threads quindi ho anche threads separati.
Vittorio___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Memory leak

2019-09-04 Per discussione Carlos Catucci
On Wed, 4 Sep 2019 at 11:04, Giovanni Vittorio Spina <
vittorio.sp...@gmail.com> wrote:

> 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.
>
>
Cosi' come lo esponi il problema e' come se tu volessi una diagnosi dal tuo
dottre per telefono e dicendogli solamente  "Dottore mi sento male".
Senza spaere cosa fanno le applicazioni e come non penso sia possibile
esserti di aiuto.

P.S. Evita il top quoting nelle risposte.

Carlos
-- 
EZLN ... Para Todos Todo ... Nada para nosotros
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Memory leak

2019-09-04 Per discussione Giovanni Vittorio Spina


> Il giorno 4 set 2019, alle ore 10:50, Carlos Catucci 
>  ha scritto:
> 
> 
> 
>> On Wed, 4 Sep 2019 at 10:44, Giovanni Vittorio Spina 
>>  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


Re: [Python] Memory leak

2019-09-04 Per discussione Carlos Catucci
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


[Python] Memory leak

2019-09-04 Per discussione Giovanni Vittorio Spina
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.
Grazie in anticipo.
Vittorio

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python