#5133: Memcached connections get left open (in certain circumstances).
-----------------------------------+----------------------------------------
Reporter: jacob | Owner: nobody
Status: reopened | Milestone: 1.0
Component: Cache system | Version: SVN
Resolution: | Keywords: memcached
Stage: Accepted | Has_patch: 1
Needs_docs: 0 | Needs_tests: 0
Needs_better_patch: 1 |
-----------------------------------+----------------------------------------
Changes (by [email protected]):
* status: closed => reopened
* resolution: fixed =>
Comment:
The patch takes care of connections kept open, but it introduces another
problem - the need to open one or more tcp connections every single
request.
With a simple loop, you can make a system run out of sockets easily -
after a socket is closed, that port cannot be reused for an eternity,
ranging from 1 minute to 4 depending on OS. If enough sockets get stuck in
TIME_WAIT state, the server simply fails to connect to memcached and start
serving everything from db again - that's not something you want to see on
a site with sufficient traffic to need a memcached installation.
In my opinion, the cure is worse than the disease. There's an easy
workaround available for the original problem: restart workers after a
certain amount of requests. With max-request=500 on a 5 threads deamon
process (mod_wsgi, times 20 processes), we never go over 100 connections
on our memcached server, started with the default cap of 1024 connections.
If you run mod_python, use MaxRequestsPerChild.
My current solution is to just noop the whole fix with one line in any
.py: django.core.cache.backends.memcached.CacheClass.close = lambda x:
None. It might be an idea to make it configurable so people can choose
between disconnect after every request and keep it open until process
restart.
--
Ticket URL: <http://code.djangoproject.com/ticket/5133#comment:16>
Django <http://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---