Django memory leak: possible causes?

trinchet picture trinchet · Aug 2, 2014 · Viewed 11.3k times · Source

I've a Django application that every so often is getting into memory leak.

I am not using large data that could overload the memory, in fact the application 'eats' memory incrementally (in a week the memory goes from ~ 70 MB to 4GB), that is why I suspect the garbage collector is missing something, I am not sure though. Also, it seems as this increment is not dependant of the number of requests.

Obvious things like DEBUG=True, leaving open files, etc... no apply here.

I'm using uWSGI 2.0.3 (+ nginx) and Django 1.4.5

I could set up wsgi so that restart the server when the memory exceeds certain limit, but I wouldn't like to do that since that is not a solution really.

Are there any well know situations where the garbage collector "doesn't do its work properly"? Could it provide some code examples?

Is there any configuration of uWSGI + Django that could cause this?

Answer

trinchet picture trinchet · Aug 7, 2014

I haven't found the exact stuff I'm looking for (each project is a world!), but following some clues and advices I managed to solve the issue. I share with you a few links that could help if you are facing a similar problem.

django memory leaks, part I, django memory leaks, part II, Finding and fixing memory leaks in Python and Debugging memory leaks in a WSGI application.

Some useful SO answers/questions: Which Python memory profiler is recommended?, Is there any working memory profiler for Python3, Python memory leaks and Python: Memory leak debugging

Update

pyuwsgimemhog is a new tool that helps to find out where the leak is.