On Fri, 2 Aug 2002, Jo Meder wrote:
Hello everybody,
after much gnashing of teeth and pulling out of hair we finally seem to have found the error in our ways. What we were doing led to a massive memory leak and I thought I'd let everbody know so you know what to avoid.
Our setup is something like <dtml-document or method> calls <pythonscript> and <pythonscript> calls <restrictedTraverse> for some given <path>. The resulting <object> is then used to render some content and the resulting data is returned.
Here comes the warning: If you don't explicitly set the <object> obtained by <restrictedTraverse> to <None> (maybe you could <del> it instead just as well) this <object> will be leaked with any <subobjects> instantiated along the way, namely a <ImplicitAcquirerWrapper> and (in our case) a <DateTime>.
I wonder if this is true for python products also. I will certainly look into it and see if that is the case and if true that would certainly explain some strange behavior I have been seeing. I have a fair number of items that use restrictedTraverse and after zope has been running for a while it seems those objects refs never go down but other items do. Often my leaks do not seem as large but after long enough it gets fairly large. My zope process will grow from 70M or so to 500M in a few weeks and it seems to be all those objects refs which gets very high. Thanks a lot for the tip.