Come eseguire il debug di un MemoryError in Python? Strumenti per il monitoraggio utilizzo della memoria?

Ho un programma in Python che muore con un MemoryError quando ho feed è un file di grandi dimensioni. Ci sono strumenti che potrei usare per capire ciò che sta usando la memoria?

Questo programma ha funzionato bene su piccoli file di input. Il programma, ovviamente, ha bisogno di alcuni miglioramenti di scalabilità; sto solo cercando di capire dove. “Benchmark prima di ottimizzare”, come una persona saggia ha detto una volta.

(Solo per prevenire l’inevitabile “aggiungere più RAM” risposta: Questo è in esecuzione una versione a 32-bit WinXP scatola con 4 gb di RAM, in modo che Python ha accesso a 2 gb di memoria utilizzabile. L’aggiunta di memoria non è tecnicamente possibile. Reinstallare il mio PC con Windows a 64 bit non è pratico.)

EDIT: Oops, questo è un duplicato di Che Python memory profiler è raccomandato?

  • Quindi è solo a me o fare tutti questi strumenti mostrano solo il numero di oggetti, mi piacerebbe sapere DOVE sono tutti questi sono.
InformationsquelleAutor user9876 | 2009-11-05

 

4 Replies
  1. 3

    Più semplice e leggera, in modo probabilmente sarebbe utilizzare il costruito in memoria di funzionalità di query di Python, come sys.getsizeof – appena eseguito sugli oggetti per i disturbi del problema (cioè un file più piccolo) e vedere cosa prende un sacco di memoria.

    • Una buona e rapida soluzione. Alcune limitazioni però, dal momento che è necessario sapere a quale oggetto o di una congettura). Inoltre, facendo una lista con 100 oggetti di 100 MB riporta la dimensione del 100 puntatori in modo che solo pochi KB)…
  2. 2

    Nel tuo caso, probabilmente la risposta è molto semplice: non leggere l’intero file in una sola volta, ma il processo il file di blocco per blocco. Che può essere molto facile o complicato, a seconda del tuo utilizzo. Solo per esempio, un checksum MD5 di calcolo può essere fatto in modo molto più efficiente per file di grandi dimensioni senza leggere tutto il file. Quest’ultima modifica ha drasticamente ridotto il consumo di memoria in alcuni SCons scenari di utilizzo, ma è stato quasi impossibile tracciare con un profiler di memoria.

    Se hai ancora bisogno di un profiler di memoria: eliben già suggerito sys.getsizeof. Se non è tagliato, provare Heapy o Pympler.

  3. 1

    Hai chiesto un strumento di raccomandazione:

    Python Memoria Validatore consente di monitorare l’utilizzo della memoria, l’assegnazione sedi, GC collezioni, istanze di oggetti, istantanee della memoria, ecc della vostra applicazione Python. Solo per Windows.

    http://www.softwareverify.com/python/memory/index.html

    Disclaimer: sono stato coinvolto nella creazione di questo software.

    • Perché solo Windows? È necessario rendersi conto che una piccola minoranza di Python sviluppatori.

Lascia un commento