quetz-mod_python-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Graham Dumpleton (JIRA)" <j...@apache.org>
Subject [jira] Closed: (MODPYTHON-1) Circular references starting from the request object create a memory leak
Date Sun, 05 Mar 2006 04:33:16 GMT
     [ http://issues.apache.org/jira/browse/MODPYTHON-1?page=all ]
Graham Dumpleton closed MODPYTHON-1:

> Circular references starting from the request object create a memory leak
> -------------------------------------------------------------------------
>          Key: MODPYTHON-1
>          URL: http://issues.apache.org/jira/browse/MODPYTHON-1
>      Project: mod_python
>         Type: Bug
>     Versions: 3.1.3, 2.7.10
>     Reporter: Nicolas Lehuen
>     Assignee: Nicolas Lehuen
>      Fix For: 3.2.7
>  Attachments: garbage_collection.patch, requestobject.c.gz
> 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.foobar=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.

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:

View raw message