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

Reply via email to