Gregory (Grisha) Trubetskoy
grisha at modpython.org
Thu Sep 9 14:34:10 EDT 2004
Thanks for the cycle detection URL tip, I'll take a look at it. A simple workaround would be to register a cleanup, something like: def foobar_cleanup(req): req.foobar = None Then in your handler, add a line: req.register_cleanup(foobar_cleanup, req) Grisha On Thu, 9 Sep 2004, Nicolas Lehuen wrote: > Hi, > > I'm running Apache 2.0.50, mod_python 3.1.3 with Python 2.3.4 on Windows XP > Pro and Windows 2000 server. > > I finally found a source for the memory leaks I have been observing for a > while now : if you store an object in the request object that reference > directly or indirectly the request object itself, it builds a circular > reference. This circular reference does not seem to be garbage collected. > > The test handler : > > from mod_python import apache > > def handler(req): > # req.foobar=req > req.content_type='text/html' > req.write('OK') > return apache.OK > > I used Apache Benchmark : > > ab -c 5 -n 100000 http://localhost/test.py > > With the comment line, everything is OK, I do not see any memory leak. > > If I uncomment the 'req.reqs=[req]' line, the memory leak shows up. My > Apache process normally uses around 20 MB without the comment, and in 30 > seconds of running the above handler (comment removed) with the above Apache > Benchmark command, it reaches 125 MB ! > > Normally, circular reference are collected by the garbage collector of > Python, but unfortunately when defining object from C, you have to do a few > tricks to support this : > > http://www.python.org/doc/2.3.4/api/supporting-cycle-detection.html > > It seems that this is not done in mod_python, by having a look at > requestobject.c. > > I find this quite a big problem, and I don't find any workaround except > "Don't reference the request object from anywhere that might be referenced > by the request object", which is a pretty big limitation, quite annoying in > the application I'm building. > > Best regards, > > Nicolas Lehuen > > _______________________________________________ > Mod_python mailing list > Mod_python at modpython.org > http://mailman.modpython.org/mailman/listinfo/mod_python >
|