Dogslow

Software kuvakaappaus:
Dogslow
Ohjelmiston tiedot:
Versio: 0.9.5
Lähetyksen päivämäärä: 14 Apr 15
Kehittäjä: Erik van Zijst
Lupa: Vapaa
Suosio: 1

Rating: nan/5 (Total Votes: 0)

Dogslow on Django vahtikoira middleware-luokka, joka kirjautuu tracebacks hitaan pyyntöjä.
Asennus:
Asenna dogslow:
Pip asentaa dogslow
Lisää sitten jos luetteloon middleware luokkia teidän Django settings.py tiedosto:
MIDDLEWARE_CLASSES = (
& Nbsp; "dogslow.WatchdogMiddleware",
& Nbsp; ...
)
Saat parhaat tulokset, jotta se yksi ensimmäisistä middlewares että ajetaan.
Kokoonpano:
Voit käyttää seuraavia kokoonpano ominaisuuksia sinun settings.py tiedoston virittää vahtikoira:
# Vahtikoira on oletuksena käytössä, väliaikaisesti poistaa, on False:
DOGSLOW = True
# Sijainti jossa Vahtikoira tallentaa lokitiedostot:
DOGSLOW_OUTPUT = '/ tmp'
# Kirjaudu pyyntöjä kauemmin 25 sekuntia:
DOGSLOW_TIMER = 25
# Kun molemmat määritelty, sähköpostit backtraces:
DOGSLOW_EMAIL_TO = 'errors@atlassian.com'
DOGSLOW_EMAIL_FROM = 'no-reply@atlassian.com'
Käyttö:
Jokainen saapuva HTTP-pyyntö saa 25 toinen aikavalvontaan vahtikoira. Jos pyyntö ei palaa ajassa, vahtikoira aktivoi ja ottaa kurkistaa pyynnöstä säikeen pino ja kirjoittaa backtrace (mukaan lukien kaikki paikalliset pino muuttujat - Django style) lokitiedostoon.
Jokainen hidas pyyntö kirjataan erilliseen tiedostoon, joka näyttää tältä:
Undead pyynnöstä siepataan: 16-05-2011 02:10:12 UTC
GET http: // localhost: 8000 /? Viive = 2
Thread ID: 140539485042432
Prosessin tunnus: 18010
Parent PID: 17762
Aloitettu: 16-05-2011 02:10:10 UTC
& Nbsp; Tiedoston "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", linja 107, vuonna inner_run
& Nbsp; run (self.addr, int (self.port), käsittelijä, IPv6 = self.use_ipv6)
& Nbsp; Tiedoston "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", rivi 696, run
& Nbsp; httpd.serve_forever ()
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", rivi 227, vuonna serve_forever
& Nbsp; self._handle_request_noblock ()
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", rivi 284, vuonna _handle_request_noblock
& Nbsp; self.process_request (pyynnöstä client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", rivi 310 process_request
& Nbsp; self.finish_request (pyynnöstä client_address)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", rivi 323, vuonna finish_request
& Nbsp; self.RequestHandlerClass (pyynnöstä client_address, itse)
& Nbsp; Tiedoston "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", rivi 570, vuonna __init__
& Nbsp; BaseHTTPRequestHandler .__ init __ (self, * args, ** kwargs)
& Nbsp; File "/usr/lib/python2.7/SocketServer.py", rivi 639, vuonna __init__
& Nbsp; self.handle ()
& Nbsp; Tiedoston "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", rivi 615, kahva
& Nbsp; handler.run (self.server.get_app ())
& Nbsp; Tiedoston "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/servers/basehttp.py", rivi 283, run
& Nbsp; self.result = sovellus (self.environ, self.start_response)
& Nbsp; Tiedoston "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", rivi 68, vuonna __call__
& Nbsp; paluu self.application (environ, start_response)
& Nbsp; Tiedoston "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/wsgi.py", rivi 273, vuonna __call__
& Nbsp; vastaus = self.get_response (pyynnöstä)
& Nbsp; Tiedoston "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/handlers/base.py", rivi 111, vuonna GET_RESPONSE
& Nbsp; vastaus = soittopyynnön (pyynnöstä * callback_args, ** callback_kwargs)
& Nbsp; File "/home/erik/work/middleware/middleware/sleep/views.py", rivi 6, lepotilassa
& Nbsp; time.sleep (float (request.GET.get ("viive", 1)))
Täysi backtrace paikallisten muuttujat:
& Nbsp; Tiedoston "/home/erik/work/virtualenv/bit/lib/python2.7/site-packages/django/core/management/commands/runserver.py", linja 107, vuonna inner_run
& Nbsp; run (self.addr, int (self.port), käsittelijä, IPv6 = self.use_ipv6)
& Nbsp; ... paljon muuta ...
Edellä oleva esimerkki osoittaa, että pyyntö kierre estettiin time.sleep () tuolloin dogslow otti tilannekuvan.
Pyytää palauttamaan ennen dogslow n aikakatkaisuarvo eivät saa kirjata.
Huomaa, että dogslow kestää vain kurkistaa säikeen pinon. Se ei keskeytä pyynnöstä tai vaikuttaa siihen muulla tavoin. Käyttämällä dogslow on siis turvallista käyttää tuotannossa.
Varoitukset
Dogslow käyttää multithreading. Se on yksi tausta pujota kahvat vahtikoira aikakatkaisuja vie tracebacks, niin että alkuperäinen pyyntö kierteet eivät keskeydy. Tämä on joitakin seurauksia.
Multithreading ja Gil
Vuonna cPython, Gil (Global Tulkki Lock) estää useita säikeitä toteuttamasta Python koodia samanaikaisesti. Vasta kun lanka nimenomaisesti luovuttaa lukko Gil voi toinen lanka ajaa.
Vapauttaminen GIL tapahtuu automaattisesti aina Python ohjelma tekee estää puhelut ulkopuolella tulkin, esimerkiksi kun teet IO.
Saat dogslow tämä tarkoittaa sitä, että se voi vain luotettavasti siepata pyyntöjä, jotka ovat hitaita, koska he tekevät IO kutsuen nukkua tai kiireinen odottaa hankkia lukot itse.
Useimmissa tapauksissa tämä on hieno. Tärkeä syy hidas Django pyyntöjen on kallis tietokanta kyselyn. Koska tämä on IO, dogslow pääse näitä hienoja. Skenaario, jossa cPython n Gil ongelmallista on, kun pyyntö lanka osuu päättymättömään silmukkaan Python-koodin (tai laillinen Python, joka on erittäin kallista ja kestää kauan toteuttaa), ei koskaan vapauttaen Gil. Vaikka dogslow n vahtikoira ajastin ei tullut ajettavissa, se ei voi kirjautua pino.
Co-rutiinit ja Greenlets
Dogslow on tarkoitettu käytettäväksi synkronisen työntekijä kokoonpano. Palvelimelle, joka käyttää omistettu kierteet (tai yksisäikeiseen, omistautunut työntekijä prosessit) palvelemaan pyyntöjä. Django sisäänrakennettu wsgi palvelin tekee tämän, koska ei Gunicorn sen oletuksena sync-työntekijä tilassa.
Kun ajetaan "co-rutiinit puitteet", jossa useita pyyntöjä palvelee samanaikaisesti yksi säie, backtraces voisi tulla järjetön.

Vaatimukset :

  • Python
  • Django

Muu ohjelmistojen kehittäjä Erik van Zijst

interruptingcow
interruptingcow

14 Apr 15

Kommentit Dogslow

Kommentteja ei löytynyt
Lisää kommentti
Ota kuvia!