Hi, the garbace collector is called once every 100 requests. See https://github.com/web2py/web2py/blob/5a0ee722605164f1eae4064d0d1dd0d72b5eb14b/gluon/main.py#L197
In addition try to pack a very basic app which can reproduce the issue, we'll have more info about what is going on wrong in your app or web2py Paolo On Monday, February 2, 2015 at 12:35:50 AM UTC+1, Leonel Câmara wrote: > > If you have pool_size defined can you tell me if putting pool_size=0 in > your DAL solves this problem? > > Anyway I got really interested in this, for some unknown to me reason, and > decided to create a *VERY CRUDE* decorator to memory check your > controller functions for leaks, I guess with time we could refine this if > there's a desire to have a memory leak checker for controller functions in > web2py. I hope it helps, if it doesn't at least it was fun to code. > > > def memcheck(f): > """ > A crude decorator to memory check your web2py controller's functions. > > > False positives are possible if your controller function returns less > than > common stuff. > > > Put it in your models and then decorate your controller functions. > > > example: > > > @memcheck > def index(): > response.flash = T("Welcome to web2py!") > return dict(message=T('Hello World')) > > > BEERWARE - You should try to buy Leonel Câmara beers! > """ > from functools import wraps > from collections import Counter, Mapping, Iterable > from gluon.languages import lazyT > from gc import get_objects > > > def get_value_objects(v): > """ > Generate an object for each value in a value including itself. > """ > if isinstance(v, basestring): > yield v > elif isinstance(v, lazyT): > yield v > yield v.s # Check lazyT symbols dict > for i in v.s: > for new_v in get_value_objects(i): > yield new_v > elif isinstance(v, Mapping): > yield v > for i in v.values(): > for new_v in get_value_objects(i): > yield new_v > elif isinstance(v, Iterable): > yield v > for i in v: > for new_v in get_value_objects(i): > yield new_v > else: > yield v > > > @wraps(f) > def wrapper(*args, **kwargs): > before = Counter(type(obj) for obj in get_objects()) > result = f(*args, **kwargs) > after = Counter(type(obj) for obj in get_objects()) > result_objs = Counter(type(obj) for obj in get_value_objects( > result)) > count = after - before - result_objs - Counter([Counter]) > # This and other stuff put in the response or session is not a > memory > # leak. > # So false positives may appear for what's not accounted here. > if response.flash: > count -= Counter(type(obj) for obj in get_value_objects( > response.flash)) > if response.js: > count -= Counter(type(obj) for obj in get_value_objects( > response.js)) > > # Finally we are ready to report what we have found. > for k in count: > print 'LEAKED: %d of type %s' % (count[k], k) > return result > > > return wrapper > > > > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.