Dogslow

Software screenshot:
Dogslow
Podrobnosti Software:
Verze: 0.9.5
Datum uploadu: 14 Apr 15
Vývojka: Erik van Zijst
Licence: Volný
Popularita: 1

Rating: nan/5 (Total Votes: 0)

Dogslow je Django watchdog middleware třída, která se přihlásí tracebacks pomalé požadavků.
Instalace:
Instalace dogslow:
Pip nainstalovat dogslow
Pak se přidá-li do svého seznamu middleware tříd ve vašem Django settings.py souboru:
MIDDLEWARE_CLASSES = (
& Nbsp; "dogslow.WatchdogMiddleware"
& Nbsp; ...
)
Pro dosažení nejlepších výsledků, z něj dělá jeden z prvních middlewares, který je spuštěn.
Configuration:
Můžete použít následující vlastnosti konfigurace ve vašem settings.py souboru naladit Watchdog:
# Watchdog je standardně povoleno, dočasně zakázat, nastavte na False:
DOGSLOW = True
# Místo, kde Watchdog ukládá soubory protokolu:
DOGSLOW_OUTPUT = '/ tmp "
Žádosti # Log trvá déle než 25 sekund:
DOGSLOW_TIMER = 25
# Když se oba uvedené, e-maily plnohodnotných backtrace:
DOGSLOW_EMAIL_TO = 'errors@atlassian.com'
DOGSLOW_EMAIL_FROM = 'no-reply@atlassian.com'
Použití:
Žádost Každý příchozí HTTP dostane 25 sekund časový limit na hlídacího psa. Je-li žádost nevrátí do té doby, watchdog aktivuje a bere nahlédnout na žádost podprocesu fronty a zapíše backtrace (včetně všech místních proměnnými - Django styl) do souboru protokolu.
Každý pomalu požadavek je zaznamenána v samostatném souboru, který vypadá takto:
Undead žádost zadržena na: 16-05-2011 02:10:12 UTC
GET http: // localhost: 8000 / delay = 2
Téma ID: 140539485042432
Process ID: 18010
Parent PID: 17762
Začínáme: 16-05-2011 02:10:10 UTC
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", linka 107, v inner_run
& Nbsp; run (self.addr, int (self.port), psovod, IPv6 = self.use_ipv6)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linka 696, v běhu
& Nbsp; httpd.serve_forever ()
& Nbsp; souboru "/usr/lib/python2.7/SocketServer.py", linka 227, v serve_forever
& Nbsp; self._handle_request_noblock ()
& Nbsp; souboru "/usr/lib/python2.7/SocketServer.py", linka 284, v _handle_request_noblock
& Nbsp; self.process_request (požadavek, client_address)
& Nbsp; souboru "/usr/lib/python2.7/SocketServer.py", linka 310, v process_request
& Nbsp; self.finish_request (požadavek, client_address)
& Nbsp; souboru "/usr/lib/python2.7/SocketServer.py", linka 323, v finish_request
& Nbsp; self.RequestHandlerClass (žádost, client_address, self)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linka 570, v __init__
& Nbsp; BaseHTTPRequestHandler .__ init __ (self, * args, ** kwargs)
& Nbsp; souboru "/usr/lib/python2.7/SocketServer.py", linka 639, v __init__
& Nbsp; self.handle ()
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linka 615, v rukojeti
& Nbsp; handler.run (self.server.get_app ())
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linka 283, v běhu
& Nbsp; self.result = aplikace (self.environ, self.start_response)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", linka 68, v __call__
& Nbsp; návrat self.application (prostř, start_response)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py", linka 273, v __call__
& Nbsp; response = self.get_response (žádost)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py", linka 111, v GET RESPONSE
& Nbsp; response = callback (žádost, * callback_args, ** callback_kwargs)
& Nbsp; Soubor "/home/erik/work/middleware/middleware/sleep/views.py", linka 6, ve spánku
& Nbsp; time.sleep (float (request.GET.get ("zpoždění", 1)))
Full backtrace s lokálními proměnnými:
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", linka 107, v inner_run
& Nbsp; run (self.addr, int (self.port), psovod, IPv6 = self.use_ipv6)
& Nbsp; ... zatížení více ...
Výše uvedený příklad ukazuje, že žádost nit byla zablokována v time.sleep (), v době, kdy dogslow vzal její snímek.
Žádosti, které vracejí před časovým limitem dogslow vyprší nechápu přihlášen.
Všimněte si, že dogslow trvá jen nahlédnout v podprocesu zásobníku. Není přerušení žádosti, nebo ovlivňovat ji jiným způsobem. Použití dogslow je tedy bezpečné pro použití ve výrobě.
Upozornění
Dogslow používá multithreading. To má jeden pozadí závit na rukojeti watchdog časové limity a vezme tracebacks, takže původní žádosti vlákna nejsou přerušeny. To má několik důsledků.
Multithreading a GIL
V cPython, GIL (Global Interpreter Lock) brání více vláken z provádění Pythonu současně. Pouze tehdy, když vlákno výslovně uvolní svůj zámek na GIL, může druhý vlákno běh.
Uvolnění GIL se provede automaticky vždy, když program, Python umožňuje blokování hovorů mimo tlumočníka, například při provádění IO.
Pro dogslow to znamená, že může jen spolehlivě zachytit požadavky, které jsou pomalé, protože dělají IO, volání do režimu spánku nebo zaneprázdněn čekání získat zámky sami.
Ve většině případů je to v pořádku. Významnou příčinou pomalých žádostí Django je dotaz drahá databáze. Protože se jedná o IO, dogslow může zachytit ty v pořádku. Scénář kde cPython Gil je problematické je, když na žádost nit zasáhne nekonečnou smyčku v Pythonu (nebo legitimního Python, který je extrémně drahé a trvá dlouhou dobu k provedení), nikdy uvolnění Gil. I když watchdog časovač dogslow se přece stává runnable, může se přihlásit do zásobníku.
Co-rutiny a Greenlets
Dogslow je určen pro použití v synchronní uspořádání pracovníků. Webserver, který používá specializované vlákna (nebo jednotlivé závitem, vyhrazené pracovní procesy), sloužit požadavky. Django je vestavěný WSGI server dělá to, stejně jako Gunicorn v módu default sync-pracovníků.
Při spuštění se "rámce spolupracovníci rutin", kde je více žádostí podávají souběžně jedno vlákno, plnohodnotných backtrace se může stát nesmyslný

Požadavky na :.

  • Python
  • Django

Ostatní software developer Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

Komentáře k Dogslow

Komentáře nebyl nalezen
Přidat komentář
Zapnout obrázky!