cla*_*ion 15 django memcached amazon-ec2
客户端的Django应用程序间歇性地(大约每天两次)投掷RuntimeError("Unable to create a new session key."):
Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 111, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/admin/views/decorators.py", line 17, in _checklogin
if request.user.is_active and request.user.is_staff:
File "/usr/local/lib/python2.6/dist-packages/django/contrib/auth/middleware.py", line 9, in __get__
request._cached_user = get_user(request)
File "/usr/local/lib/python2.6/dist-packages/django/contrib/auth/__init__.py", line 107, in get_user
user_id = request.session[SESSION_KEY]
File "/usr/local/lib/python2.6/dist-packages/django/contrib/sessions/backends/base.py", line 47, in __getitem__
return self._session[key]
File "/usr/local/lib/python2.6/dist-packages/django/contrib/sessions/backends/base.py", line 195, in _get_session
self._session_cache = self.load()
File "/usr/local/lib/python2.6/dist-packages/django/contrib/sessions/backends/cache.py", line 16, in load
self.create()
File "/usr/local/lib/python2.6/dist-packages/django/contrib/sessions/backends/cache.py", line 33, in create
raise RuntimeError("Unable to create a new session key.")
RuntimeError: Unable to create a new session key.
Run Code Online (Sandbox Code Playgroud)
正如您在回溯中看到的那样,django.contrib.sessions当使用缓存会话后端与memcached缓存后端时,这种情况发生在深层次.
Django trac票证(https://code.djangoproject.com/ticket/14093)建议将会话密钥哈希从MD5更改为UUID4,但这没有帮助 - 问题在于网络.我观察到(使用tcpdump)当从app服务器到memcache服务器的TCP连接因数据包丢失而超时时,可能会发生此异常.
我们有两个app服务器和一个memcached(1.4.2)服务器,都在Amazon EC2中运行.在高需求期间,我观察到一个应用服务器与memcache服务器交换75,000个数据包/秒.在这个需求高的时期,我观察到一个SYN数据包丢失了一个新的memcache连接,导致python-memcache连接超时(在内核甚至改变重传之前)和a RuntimeError.
我对如何解决这个问题感到茫然.我想调整Linux的TCP重传计时器低于三秒,但它不可调.如果做不到这一点,我想让python-memcache在放弃之前重试几次连接,但事实并非如此.我看到pylibmc具有可配置的连接和重试行为,但我无法找到解决丢包问题的选项组合.
想法?
刚解决了同样的问题apt-get install memcached.可能也是你的情况.
哦,对不起,这不是你的情况.我只是更加注意阅读问题.但我会留下我的答案 - 因为它是关于这个运行时错误.
查看启动板上的 python-memcached 代码,您应该能够调整dead_retry和retry_timeout. 另一种选择可能是在一个或两个应用服务器上运行低内存、低连接的 memcached 实例,作为主 Memcached 服务器无法访问时的后备方案。
| 归档时间: |
|
| 查看次数: |
8163 次 |
| 最近记录: |