On Fri, Jul 22, 2016 at 10:39:26PM +0200, Christoph Zwerschke wrote: > Am 22.07.2016 um 21:33 schrieb Justin Pryzby: > >I discovered that pg.DB() leaks, while pg.connect() doesn't. > > Thanks, I'll look into that tomorrow. Your clues and test code are already > very helpful. Maybe I can also add some tests for such memory leaks into the > test suite.
Good idea :) I would do something like attached. Note that maxrss may not work on every kernel (?) Cheers, Justin
#! /usr/bin/python import pg import resource sql='SELECT 1' for i in xrange(1): db=pg.DB() db.query(sql).dictresult() a=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss #db.close() # Note: larger numbers will cause too many postgres clients, as the DB is never # freed! for i in xrange(55): db=pg.DB() db.query(sql).dictresult() b=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss #db.close() rel=1.0*abs(b-a)/a print a,b,"rel rss=",rel #using 10% more RAM to do the same small operation many times is a failure: assert rel<0.1, 'memory leak1' for i in xrange(1): db=pg.DB() db.query(sql).dictresult() a=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss db.close() for i in xrange(999): db=pg.DB() db.query(sql).dictresult() b=resource.getrusage(resource.RUSAGE_SELF).ru_maxrss db.close() rel=1.0*abs(b-a)/a print a,b,"rel rss2=",rel #using 10% more RAM to do the same small operation many times is a failure: assert rel<0.1, 'memory leak2'
_______________________________________________ PyGreSQL mailing list [email protected] https://mail.vex.net/mailman/listinfo.cgi/pygresql
