Dogslow

Software screenshot:
Dogslow
Software detaljer:
Version: 0.9.5
Upload dato: 14 Apr 15
Udvikler: Erik van Zijst
Licens: Gratis
Popularitet: 1

Rating: nan/5 (Total Votes: 0)

Dogslow er Django vagthund middleware klasse, der logger tracebacks af langsomme forespørgsler.
Installation:
Installer dogslow:
pip installere dogslow
Derefter tilsættes hvis til din liste over middleware klasser i din Django settings.py fil:
MIDDLEWARE_CLASSES = (
& Nbsp; "dogslow.WatchdogMiddleware«,
& Nbsp; ...
)
For de bedste resultater, gør det en af ​​de første middlewares der køres.
Konfiguration:
Du kan bruge følgende konfigurationsegenskaber i din settings.py fil til tune vagthund:
# Watchdog er aktiveret som standard, for midlertidigt at deaktivere, sat til falsk:
DOGSLOW = True
# Beliggenhed hvor Watchdog opbevarer sine logfiler:
DOGSLOW_OUTPUT = '/ tmp'
# Log anmodninger tager længere tid end 25 sekunder:
DOGSLOW_TIMER = 25
# Når både angivne emails backtrace:
DOGSLOW_EMAIL_TO = 'errors@atlassian.com'
DOGSLOW_EMAIL_FROM = 'no-reply@atlassian.com'
Anvendelse:
Hver indgående HTTP-anmodning får en 25 sekunder timeout i vagthund. Hvis anmodningen ikke vende tilbage inden det tidspunkt vagthund aktiverer og tager et kig på anmodning tråd stak og skriver backtrace (inklusive alle lokale stack variable - Django stil) til en logfil.
Hver langsom anmodning er logget på en separat fil, der ser sådan ud:
Undead anmodning opfanget på: 16-05-2011 02:10:12 UTC
GET http: // localhost: 8000 / forsinkelse = 2
Tråd ID: 140539485042432
Proces ID: 18010
Parent PID: 17762
Startet: 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", linie 107, i inner_run
& Nbsp; run (self.addr, int (self.port), handler, IPv6 = self.use_ipv6)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linje 696, i løb
& Nbsp; httpd.serve_forever ()
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", linje 227, i serve_forever
& Nbsp; self._handle_request_noblock ()
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", linje 284, i _handle_request_noblock
& Nbsp; self.process_request (anmodning client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", linje 310, process_request
& Nbsp; self.finish_request (anmodning client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", linje 323, i finish_request
& Nbsp; self.RequestHandlerClass (anmodning client_address, self)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linje 570, i __init__
& Nbsp; BaseHTTPRequestHandler .__ init __ (self, * args, ** kwargs)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", linje 639, i __init__
& Nbsp; self.handle ()
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linje 615, i håndtaget
& Nbsp; handler.run (self.server.get_app ())
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linje 283, i løb
& Nbsp; self.result = ansøgning (self.environ, self.start_response)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", linje 68, i __call__
& Nbsp; tilbagevenden self.application (miljø, start_response)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py", linje 273, i __call__
& Nbsp; respons = self.get_response (anmodning)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py", linje 111, i GET RESPONSE
& Nbsp; respons = tilbagekald (anmodning * callback_args, ** callback_kwargs)
& Nbsp; File "/home/erik/work/middleware/middleware/sleep/views.py", linje 6, i søvn
& Nbsp; time.sleep (float (request.GET.get (»forsinkelse«, 1)))
Fuld backtrace med lokale variable:
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", linie 107, i inner_run
& Nbsp; run (self.addr, int (self.port), handler, IPv6 = self.use_ipv6)
& Nbsp; ... belastninger mere ...
Eksemplet ovenfor viser, at anmodningen tråd blev blokeret i time.sleep () på det tidspunkt dogslow tog sin snapshot.
Anmoder om, at vende tilbage før dogslow s timeout udløber ikke logget.
Bemærk at dogslow tager kun et kig på tråden stak. Det behøver ikke afbryde anmodningen, eller påvirke det på nogen anden måde. Brug dogslow er derfor sikkert at bruge i produktionen.
Advarsler
Dogslow bruger multithreading. Det har en enkelt baggrund tråd håndtagene de watchdog timeouts og tager tracebacks, således at de oprindelige anmodning tråde ikke afbrydes. Dette har nogle konsekvenser.
Multithreading og GIL
I cPython, det GIL (Global tolk lås) forhindrer flere tråde i at udføre Python kode samtidig. Kun når en tråd udtrykkeligt frigiver sin lås på GIL, kan en anden tråd løb.
Udløsning af GIL sker automatisk, når en Python program gør at blokere opkald uden for tolk, for eksempel når du gør IO.
For dogslow betyder det, at det kun kan pålideligt opsnappe anmodninger, der er langsom, fordi de gør IO, kalder søvn eller optaget venter på at erhverve låse selv.
I de fleste tilfælde er fint. En vigtig årsag til langsom Django anmodninger er en dyr database forespørgsel. Da dette er IO kan dogslow opfange dem fint. Et scenario, hvor cPython Gil er problematisk er, når anmodningen er tråden rammer en uendelig løkke i Python kode (eller legitim Python, der er ekstremt dyrt og tager lang tid at udføre), aldrig slippe GIL. Selvom dogslow vagthund timeren gør bliver kørbar, kan den ikke logge stakken.
Co-rutiner og Greenlets
Dogslow er beregnet til brug i en synkron arbejder konfiguration. En webserver, der bruger dedikerede tråde (eller single-threaded, dedikerede arbejdstager processer) for at tjene anmodninger. Django indbyggede WSGI server gør dette, ligesom Gunicorn i dens standard sync-arbejdstager-tilstand.
Når du kører med en "co-rutiner ramme" hvor der serveres flere anmodninger samtidigt af én tråd, kan backtrace blive meningsløse

Krav :.

  • Python
  • Django

Andre software developer Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

Kommentarer til Dogslow

Kommentarer ikke fundet
Tilføj kommentar
Tænd billeder!