Re: [Python] Memory leak
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
> 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
> 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
> 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
> 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
> 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
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
> 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
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
> 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
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
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