Dogslow

软件截图:
Dogslow
软件详细信息:
版本: 0.9.5
上传日期: 14 Apr 15
许可: 免费
人气: 62

Rating: 3.5/5 (Total Votes: 2)

Dogslow是登录慢的请求回溯Django的看门狗中间件类。
安装:
安装dogslow:
PIP安装dogslow
然后,如果添加到您在你的Django settings.py文件中间件类的列表:
MIDDLEWARE_CLASSES =(
 “dogslow.WatchdogMiddleware',
  ...

为了达到最佳效果,使其所运行的第一个中间件之一。
配置:
您可以使用您的settings.py文件调整看门狗以下配置属性:
#看门狗默认启用,暂时禁用,设置为False:
DOGSLOW =真
#位置,看门狗存储其日志文件:
DOGSLOW_OUTPUT ='/ tmp目录“
#登录请求花费的时间超过25秒:
DOGSLOW_TIMER = 25
#当两个指定的电子邮件回溯:
DOGSLOW_EMAIL_TO ='errors@atlassian.com“
DOGSLOW_EMAIL_FROM ='no-reply@atlassian.com“
用法:
每个传入HTTP请求得到的看门狗25秒超时。如果请求没有那个时间内返回,看门狗激活,并采取偷看在请求线程的堆栈和写入回溯(包括所有的本地堆栈变量 - Django的风格)日志文件。
每一个缓慢的请求被记录在看起来像这样一个单独的文件:
亡灵的请求截获:16-05-2011二点10分12秒UTC
GET的http://本地主机:8000 /延时= 2
线程ID:140539485042432
进程ID:18010
父PID:17762
入门:16-05-2011二点10分10秒UTC
 文件"/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py",线107,在inner_run
 运行(self.addr,INT(self.port),处理器,IPv6的= self.use_ipv6)
 文件“/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py”,696线,在运行
  httpd.serve_forever()
 文件“/usr/lib/python2.7/SocketServer.py”,线路227,在serve_forever
  self._handle_request_noblock()
 文件“/usr/lib/python2.7/SocketServer.py”,线路284,在_handle_request_noblock
  self.process_request(要求,CLIENT_ADDRESS)
 文件“/usr/lib/python2.7/SocketServer.py”,线路310,在process_request
  self.finish_request(要求,CLIENT_ADDRESS)
 文件“/usr/lib/python2.7/SocketServer.py”,线路323,在finish_request
  self.RequestHandlerClass(要求CLIENT_ADDRESS,个体经营)
 文件“/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py”,线路570,在__init__
  BaseHTTPRequestHandler .__的init __(个体经营,*的args,** kwargs)
 文件“/usr/lib/python2.7/SocketServer.py”,线路639,在__init__
  self.handle()
 文件“/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py”,线路615,在手柄
  handler.run(self.server.get_app())
 文件“/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py”,283线,在运行
  self.result =应用程序(self.environ,self.start_response)
 文件“/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py”,68行,在__call__
 回报self.application(ENVIRON,start_response)
 文件“/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py”,线路273,在__call__
 响应= self.get_response(要求)
 文件“/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py”,线路111,在get_response
 响应=回调(的要求,* callback_args,** callback_kwargs)
 文件“/home/erik/work/middleware/middleware/sleep/views.py”,第6行,睡眠
  time.sleep(浮点(request.GET.get('延时',1)))
完整回溯与局部变量:
 文件"/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py",线107,在inner_run
 运行(self.addr,INT(self.port),处理器,IPv6的= self.use_ipv6)
  ...加载更多...
上面的例子表明,请求线程在dogslow了它的快照时受阻于time.sleep()。
请求dogslow的超时之前返回到期没有得到记录。
需要注意的是dogslow只需要偷看线程的堆栈。它不中断的请求,或以任何其他方式影响它。使用dogslow因此,安全在生产中使用。
注意事项
Dogslow使用多线程。它有一个单一的后台线程手柄看门狗超时和开出回溯,使原来的请求线程不会被中断。这有一定的影响。
多线程和GIL
在CPython中,该GIL(全局解释器锁)防止多个线程同时执行Python代码。只有当一个线程明确释放其对GIL锁,可第二个线程运行。
释放GIL是每当一个Python程序,使阻塞的解释外线呼叫,例如做IO时自动完成。
对于dogslow这意味着它只能可靠拦截是缓慢的,因为他们正在做的IO,调用sleep或占线等待获取锁自己的请求。
在大多数情况下,这是好的。慢的Django请求的一个重要原因是一种昂贵的数据库查询。由于这是IO,dogslow可以拦截那些罚款。这样一个场景:CPython中的GIL是有问题的是,当请求的线程遇到一个无限循环的Python代码(或合法的Python是极其昂贵的,需要很长的时间来执行),从来没有释放GIL。尽管dogslow的看门狗定时器并成为可运行的,它无法登录堆栈。
合作程序和Greenlets
Dogslow旨在用于在同步工作器配置中使用。使用专用线程(或单线程,专用工作进程)Web服务器来服务请求。 Django的内置WSGI服务器这样做,作为其默认的同步工作者模式确实Gunicorn。
当与“协同例程框架”,其中的多个请求是由一个线程同时兼任运行,回溯可能会变得毫无意义

要求

  • 在Python中
  • 在Django的

显影剂的其他软件 Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

意见 Dogslow

评论没有发现
添加评论
打开图片!