Michael Droettboom wrote:
> Eric Firing wrote:
>> So, this test is still showing problems, with similar memory 
>> consumption in these three backends.
> Not necessarily.  By default, Python allocates large pools from the 
> operating system and then manages those pools itself (though its 
> PyMalloc call).  Prior to Python 2.5, those pools were never freed.  
> With Python 2.5, empty pools, when they occur, are freed back to the 
> OS.  Due to fragmentation issues, even if there is enough free space in 
> those pools for new objects, new pools may need to be created anyway, 
> since Python objects can't be moved once they are created.  So seeing 
> modest increases in memory usage during a long-running Python 
> application is typical, and not something that can be avoided 
> wiinaccurate at finding memory leaksthout micro-optimizing for pool 
> performance (something that may be very difficult).  If memory usage is 
> truly increasing in an unbounded way, then, yes, there may be problems, 
> but it should eventually stabilize (though in a test such as memleak_gui 
> that may take many iterations).  It's more interesting to see the curve 
> of memory usage over time than the average over a number of iterations.

I agree.  I just ran 2000 iterations with GtkAgg, plotted every 10th 
point, and the increase is linear (apart from a little bumpiness) over 
the entire range (not just the last 1000 iterations reported below):

Backend GTKAgg, toolbar toolbar2
Averaging over loops 1000 to 2000
Memory went from 31248k to 35040k
Average memory consumed per loop: 3.7920k bytes

Maybe this is just the behavior of pymalloc in 2.5?


> For further reading, see:
> http://evanjones.ca/python-memory.html
> README.valgrind in the Python source
> http://mail.python.org/pipermail/python-dev/2006-March/061991.html
> 
> Because of this, using the total memory allocated by the Python process 
> to track memory leaks is pretty blunt tool.  More important metrics are 
> the total number of GC objects (gc.get_objects()), GC garbage 
> (gc.garbage), and using a tool like Valgrind or Purify to find 
> mismatched malloc/frees.  Another useful tool (but I didn't resort to 
> yet with matplotlib testing) is to build Python with COUNT_ALLOCS, which 
> then gives access to the total number of mallocs and frees in the Python 
> interpreter at runtime.
> 
> IMO, the only reasonable way to use the total memory usage of Python to 
> debug memory leaks is if you build Python without pool allocation 
> (--without-pymalloc).  That was how I was debugging memory leaks last 
> week (in conjunction with valgrind, and the gc module), and with that 
> configuration, I was only seeing memory leakage with Pygtk 2.4, and a 
> very small amount with Tk.  Are your numbers from a default build?  If 
> so, I'll rebuild my Python and check my numbers against yours.  If they 
> match, I suspect there's little we can do.

I used stock Python 2.5 from ubuntu Feisty.  I should compile a version 
as you suggest, but I haven't done it yet.

Eric

> 
> Cheers,
> Mike
> 


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to