Dogslow

軟件截圖:
Dogslow
軟件詳細信息:
版本: 0.9.5
上傳日期: 14 Apr 15
許可: 免費
人氣: 1

Rating: nan/5 (Total Votes: 0)

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

評論沒有發現
添加評論
打開圖片!