Dogslow

Software skärmdump:
Dogslow
Mjukvaruinformation:
Version: 0.9.5
Ladda upp dagen: 14 Apr 15
Utvecklare: Erik van Zijst
Licens: Gratis
Popularitet: 1

Rating: nan/5 (Total Votes: 0)

Dogslow är Django vakthund middle klass som loggar tracebacks av långsamma förfrågningar.
Installation:
Installera dogslow:
Pip installera dogslow
Lägg sedan om till din lista över middle klasser i din Django settings.py fil:
MIDDLEWARE_CLASSES = (
& Nbsp; 'dogslow.WatchdogMiddleware ",
& Nbsp; ...
)
För bästa resultat, gör den till en av de första middlewares som körs.
Konfiguration:
Du kan använda följande konfigurations egenskaper i din settings.py filen för att ställa vakthund:
# Watchdog är aktiverat som standard, för att tillfälligt inaktivera, satt till False:
DOGSLOW = True
# Plats där Watchdog lagrar sina loggfiler:
DOGSLOW_OUTPUT = '/ tmp'
# Log förfrågningar tar längre än 25 sekunder:
DOGSLOW_TIMER = 25
# När både specificerade, e-post bakåtspårningar skapas:
DOGSLOW_EMAIL_TO = 'errors@atlassian.com'
DOGSLOW_EMAIL_FROM = 'no-reply@atlassian.com'
Användning:
Varje inkommande HTTP-begäran får en andra timeout i watchdog 25. Om en framställning inte tillbaka inom denna tid, aktiverar vakthund och tar en titt på begäran tråden stack och skriver bakåtspårning (inklusive alla lokala stack variabler - Django stil) till en loggfil.
Varje långsam begäran loggas i en separat fil som ser ut så här:
Undead begäran upptäcks vid: 16-05-2011 02:10:12 UTC
GET http: // localhost:? 8000 / fördröjning = 2
Gäng ID: 140539485042432
Process-ID: 18010
Förälder PID: 17762
Startade: 16-05-2011 02:10:10 UTC
& Nbsp; Arkiv "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", linje 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 run
& 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 (begäran client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", linje 310, i process_request
& Nbsp; self.finish_request (begäran client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", linje 323, i finish_request
& Nbsp; self.RequestHandlerClass (begäran client_address, själv)
& 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 handtaget
& 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 run
& Nbsp; self.result = ansökan (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; retur self.application (environ, 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 (begäran)
& Nbsp; File "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py", linje 111, i get_response
& Nbsp; respons = callback (begäran * callback_args, ** callback_kwargs)
& Nbsp; File "/home/erik/work/middleware/middleware/sleep/views.py", rad 6, i sömnen
& Nbsp; time.sleep (float (request.GET.get ("försening", 1)))
Full bakåtspårning med lokala variabler:
& Nbsp; Arkiv "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", linje 107, i inner_run
& Nbsp; run (self.addr, int (self.port), handler, ipv6 = self.use_ipv6)
& Nbsp; ... laddar mer ...
Exemplet ovan visar att begäran tråden blockerades i time.sleep () vid tidpunkten dogslow tog sin snapshot.
Begär att återvända före dogslow s timeout löper inte loggas.
Observera att dogslow tar bara en titt på tråden stack. Det stör inte begäran, eller påverka den på något annat sätt. Använda dogslow är därför säkra att använda i produktionen.
Förbehåll
Dogslow använder multitråd. Den har en enda bakgrund trä handtagen Watchdog timeout och tar de tracebacks, så att den ursprungliga begäran trådarna inte avbryts. Detta har vissa konsekvenser.
Multitråd och GIL
I cPython, det GIL (Global Interpreter Lock) förhindrar flera trådar från att köra Python-kod samtidigt. Först när en tråd släpper uttryckligen sitt lås på GIL, kan en andra gängkörning.
Frigöra GIL sker automatiskt när ett Python-program gör att blockera samtal utanför tolken, till exempel när man gör IO.
För dogslow innebär detta att det kan bara tillförlitligt avlyssna förfrågningar som är långsam eftersom de gör IO, kallar sömn eller upptagen väntar på att skaffa lås själva.
I de flesta fall är detta bra. En viktig orsak till långsamma Django önskemål är en dyr databasfrågan. Eftersom detta är IO, kan dogslow avlyssna dem fint. Ett scenario där cPython s GIL är problematiskt är när begäran tråd träffar en oändlig loop i Python-kod (eller legitimt Python som är extremt dyrt och tar lång tid att exekvera), aldrig släppa GIL. Även om dogslow s övervakningsklockan blir körbart, kan den inte logga bunten.
Co-rutiner och Greenlets
Dogslow är avsedd att användas i en synkron konfiguration arbetare. En webbserver som använder dedikerade trådar (eller entrådiga, hängivna arbetsprocesser) för att tjäna förfrågningar. Django inbyggda wsgi server gör detta, liksom Gunicorn i standardsynk-arbetaren läge.
När du kör med en "co-rutiner ramverk" där flera framställningar betjänas samtidigt av en tråd, kan bakåtspårningar skapas blir meningslösa

Krav :.

  • Python
  • Django

Annan programvara för utvecklare Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

Kommentarer till Dogslow

Kommentarer hittades inte
Kommentar
Slå på bilder!