Dogslow

Skjermbilde programvare:
Dogslow
Prog.varedetaljer:
Versjon: 0.9.5
Last opp dato: 14 Apr 15
Utvikler: Erik van Zijst
Lisens: Gratis
Popularitet: 1

Rating: nan/5 (Total Votes: 0)

Dogslow er Django vaktbikkje mellomvare klasse som logger tracebacks av langsomme forespørsler.
Installasjon:
Installere dogslow:
PIP installere dogslow
Deretter legge om til din liste over mellomvare klasser i din Django settings.py filen:
MIDDLEWARE_CLASSES = (
& Nbsp; 'dogslow.WatchdogMiddleware',
& Nbsp; ...
)
For best resultat, gjør den til en av de første middlewares som drives.
Konfigurasjon:
Du kan bruke følgende konfigurasjonsegenskapene i din settings.py fil til tune vaktbikkje:
# Watchdog er aktivert som standard, for å midlertidig deaktivere, satt til False:
DOGSLOW = True
# Beliggenhet hvor Watchdog lagrer loggfiler:
DOGSLOW_OUTPUT = '/ tmp'
# Log forespørsler tar lenger enn 25 sekunder:
DOGSLOW_TIMER = 25
# Når både spesifiserte, e-post logger ikke kan lages:
DOGSLOW_EMAIL_TO = 'errors@atlassian.com'
DOGSLOW_EMAIL_FROM = 'no-reply@atlassian.com'
Bruk:
Hver innkommende HTTP-forespørsel får en 25 sekund timeout i vaktbikkje. Dersom en anmodning ikke returnerer innen den tid, den vaktbikkje aktiverer og tar en titt på anmodning tråden stack og skriver den tilbakesporing (inkludert alle lokale stack variabler - Django stil) til en loggfil.
Hver langsom henvendelsen er registrert i en egen fil som ser slik ut:
Undead forespørsel snappet på: 16-05-2011 02:10:12 UTC
GET http: // localhost: 8000 / forsinkelse = 2
Tråd ID: 140539485042432
Prosess-ID: 18010
Parent PID: 17762
Startet: 16-05-2011 02:10:10 UTC
& Nbsp; Fil "/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; Fil "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linje 696, i løp
& Nbsp; httpd.serve_forever ()
& Nbsp; Fil "/usr/lib/python2.7/SocketServer.py", linje 227, i serve_forever
& Nbsp; self._handle_request_noblock ()
& Nbsp; Fil "/usr/lib/python2.7/SocketServer.py", linje 284, i _handle_request_noblock
& Nbsp; self.process_request (forespørsel, client_address)
& Nbsp; Fil "/usr/lib/python2.7/SocketServer.py", linje 310, i process_request
& Nbsp; self.finish_request (forespørsel, client_address)
& Nbsp; Fil "/usr/lib/python2.7/SocketServer.py", linje 323, i finish_request
& Nbsp; self.RequestHandlerClass (forespørsel, client_address, selv)
& Nbsp; Fil "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linje 570, i __init__
& Nbsp; BaseHTTPRequestHandler .__ init __ (selv, * args, ** kwargs)
& Nbsp; Fil "/usr/lib/python2.7/SocketServer.py", linje 639, i __init__
& Nbsp; self.handle ()
& Nbsp; Fil "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linje 615, i håndtaket
& Nbsp; handler.run (self.server.get_app ())
& Nbsp; Fil "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", linje 283, i løp
& Nbsp; self.result = søknad (self.environ, self.start_response)
& Nbsp; Fil "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", linje 68, i __call__
& Nbsp; retur self.application (miljø, start_response)
& Nbsp; Fil "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py", linje 273, i __call__
& Nbsp; respons = self.get_response (forespørsel)
& Nbsp; Fil "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py", linje 111, i get_response
& Nbsp; respons = tilbakeringing (forespørsel, * 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)))
Full tilbakesporing med lokale variabler:
& Nbsp; Fil "/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; ... masse mer ...
Eksempelet ovenfor viser at anmodningen tråden ble blokkert i time.sleep () på tidspunktet dogslow tok sin snapshot.
Forespørsler som returnerer før dogslow timeout utløper ikke får logget inn.
Merk at dogslow tar bare en titt på tråden stack. Det avbryter ikke forespørselen, eller påvirke det på noen annen måte. Ved hjelp dogslow er derfor trygt å bruke i produksjonen.
Advarsler
Dogslow bruker multithreading. Den har en enkel bakgrunn tråden håndtakene de vaktbikkje timeouts og tar tracebacks, slik at de opprinnelige forespørsel trådene ikke blir avbrutt. Dette har noen konsekvenser.
Multithreading og GIL
I cPython, GIL (Global Interpreter Lock) hindrer flere tråder fra å kjøre Python-kode samtidig. Bare når en tråd eksplisitt utgivelser sin lås på GIL, kan en annen tråd løp.
Utløse GIL gjøres automatisk når en Python program gjør blokkere samtaler utenfor av tolk, for eksempel når du gjør IO.
For dogslow dette betyr at det bare kan sikkert snappe forespørsler som er treg fordi de gjør IO, ringer søvn eller opptatt venter på å skaffe låser selv.
I de fleste tilfeller er dette greit. En viktig årsak til treg Django forespørsler er en kostbar database spørring. Siden dette er IO, kan dogslow avskjære de fine. Et scenario hvor cPython sin GIL er problematisk er når forespørselen er tråden treffer en uendelig sløyfe i Python-kode (eller legitim Python som er ekstremt dyrt og tar lang tid å utføre), aldri slippe GIL. Selv om dogslow vaktbikkje timeren ikke blir kjørbar, kan det ikke logge stabelen.
Co-rutiner og Greenlets
Dogslow er beregnet for bruk i en synkron arbeideren konfigurasjon. En webserver som bruker dedikerte tråder (eller enkelt-threaded, dedikerte arbeidsprosesser) for å tjene forespørsler. Django innebygde wsgi serveren gjør dette, som gjør Gunicorn i standard sync-worker modus.
Når du kjører med en "co-rutiner rammeverk" der flere forespørsler blir servert samtidig av en tråd, kanskje kan lages blir nonsens

Krav .

  • Python
  • Django

Annen programvare fra utvikleren Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

Kommentarer til Dogslow

Kommentarer ikke funnet
Legg til kommentar
Slå på bilder!